{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import pdb"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "### 1.单位矩阵"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 1.,  0.,  0.],\n",
       "       [ 0.,  1.,  0.],\n",
       "       [ 0.,  0.,  1.]])"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.eye(3)\n",
    "a"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "### 2.单变量线性回归"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2.1读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>population</th>\n",
       "      <th>profit</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>6.1101</td>\n",
       "      <td>17.5920</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>5.5277</td>\n",
       "      <td>9.1302</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>8.5186</td>\n",
       "      <td>13.6620</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>7.0032</td>\n",
       "      <td>11.8540</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5.8598</td>\n",
       "      <td>6.8233</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   population   profit\n",
       "0      6.1101  17.5920\n",
       "1      5.5277   9.1302\n",
       "2      8.5186  13.6620\n",
       "3      7.0032  11.8540\n",
       "4      5.8598   6.8233"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = pd.read_csv('ex1data1.txt',header=None, names=['population', 'profit'])\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>population</th>\n",
       "      <th>profit</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>97.000000</td>\n",
       "      <td>97.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>8.159800</td>\n",
       "      <td>5.839135</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>3.869884</td>\n",
       "      <td>5.510262</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>5.026900</td>\n",
       "      <td>-2.680700</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>5.707700</td>\n",
       "      <td>1.986900</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>6.589400</td>\n",
       "      <td>4.562300</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>8.578100</td>\n",
       "      <td>7.046700</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>22.203000</td>\n",
       "      <td>24.147000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       population     profit\n",
       "count   97.000000  97.000000\n",
       "mean     8.159800   5.839135\n",
       "std      3.869884   5.510262\n",
       "min      5.026900  -2.680700\n",
       "25%      5.707700   1.986900\n",
       "50%      6.589400   4.562300\n",
       "75%      8.578100   7.046700\n",
       "max     22.203000  24.147000"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "pandas.core.frame.DataFrame"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nuBU4g5GRT9DXt33Ot5yTJEmSFhtDu9RERld2r1QqbN++nUqlws6dt7Bs2TKy/9yPHoWHbcASHn/8\n8Qk/c6q58jAwzvP6RvAlSZIkTc457VITGruyezbf/RCjo+9HnAoM0draOuFnTTVXHlrHeZ49nuxz\nJUmSJE3NkXZpETgy3/0+4HLg08DltLTcR2dn16SL0E00Vx4uJgv9x+TPt5LNab+TlpZtU36uJEmS\npKkZ2qVF4sh893cDFwDvpqNjDb29PdN475G58itWHEM2p3109P4g2Zz2LXV/riRJkqTJ2R4vLRKj\n892r1SoDAwPT2k99ovfWPgem/bljjd0HXpIkSVrsDO3SIjN2vvts3jve85kYbx9493qXJEmSbI+X\nNE8qlQo7duyoa9u38faBd693SZIkydAuaY4NDQ2xYcMmVq1aRVdXF+3t7WzYsInh4eFxz59oH3j3\nepckSZIM7ZLm2HRHzafaB9693iVJkrSYGdolzZmZjJofvQ98Lfd6lyRJkgztkubMTEbNJ9oHfiH2\nep/OvHtJkiSpCIZ2SUepVCpce+21XHfdddMOszMdNR9vH/j53Ot9uvPuJUmSpKK45ZskIAuyb3jD\nm7j11q/UvLqEV77yVXz+8/9e19Zro6Pm/f1bGRlJZCPsu2hp2UZHx8Sj5rPZQ34mjp53vw7YTX//\nVrq7z2fnzlvm7ftKkiRJ0+VIuyQgC7K33fYNaheQg+O49dbd09p6bTaj5m1tbWzcuHHeW+JdrV6S\nJEmNwtAu6XCQTelqaoMsXAn837TCbEpp/gqdA65WL0mSpEZiaJc0ZZCF+sPsdLd8W2iuVi9JkqRG\nYmiXNGWQBXjggQemHG1vhNbzIlerlyRJkqbL0C7pcJCNuJjaIAtbgacAS7joooumXGV9tq3nC7UF\n20KvVi9JkiTNlKFdEpVKhQsvvIAzzzyF2iALB4EE/Bv1tLrPtPV8obdgG12tvlKpsH37diqVCjt3\n3lLXCvmSJEnSQnLLN6lJVSoVBgcHJ90+bWhoiLPPfj179hxpg1+7dj3nnnsOjz76KJdeeinwKbJW\nd8ha3RN9fVuoVqtP+NyZbvlW1BZsbW1ttsNLkiSp1Bxpl5pMvaPWQ0NDtLefwp49d1G7aNwdd3yb\nHTu+zOrVq/Mzx7a6PxuAXbt2MZ7ptp43wjx4SZIkqSiGdqnJ1Lt6+9lnn8PPfvYQ8K+MF5ZbWlry\n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\nJEmSSur/Ad9/P4f9W6vYAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1dd5483e908>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "data.plot(kind='scatter', x='population', y='profit',figsize=(12,8))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "data.insert(0,column='theat0',value=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>theat0</th>\n",
       "      <th>population</th>\n",
       "      <th>profit</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>6.1101</td>\n",
       "      <td>17.5920</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>5.5277</td>\n",
       "      <td>9.1302</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>8.5186</td>\n",
       "      <td>13.6620</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>7.0032</td>\n",
       "      <td>11.8540</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>5.8598</td>\n",
       "      <td>6.8233</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   theat0  population   profit\n",
       "0       1      6.1101  17.5920\n",
       "1       1      5.5277   9.1302\n",
       "2       1      8.5186  13.6620\n",
       "3       1      7.0032  11.8540\n",
       "4       1      5.8598   6.8233"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "X = data.iloc[:,:2]\n",
    "y = data.iloc[:,2:3]\n",
    "X = np.matrix(X.values)\n",
    "y = np.matrix(y.values)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "#### 2.2梯度下降求解"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((97, 2), (97, 1), (1, 2))"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#参数θ有两个,假设初始值均为0\n",
    "theta = np.matrix(np.array([0,0]))\n",
    "X.shape,y.shape,theta.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 以参数θ为特征函数的代价函数,根据最小二乘法\n",
    "$$J\\left( \\theta  \\right)=\\frac{1}{2m}\\sum\\limits_{i=1}^{m}{{{\\left( {{h}_{\\theta }}\\left( {{x}^{(i)}} \\right)-{{y}^{(i)}} \\right)}^{2}}}$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#代价函数\n",
    "def computeCost(X, y, theta):\n",
    "    inner = np.power(((X*theta.T) - y),2)\n",
    "    return np.sum(inner)/(2*len(X))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "32.072733877455676"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "computeCost(X, y, theta)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "分析知:梯度下降算法是一个迭代算法,参数需要X,Y,以及学习率α,参数θ,迭代次数iters\n",
    "\n",
    "参照公式$${{\\theta }_{j}}:={{\\theta }_{j}}-\\alpha \\frac{\\partial }{\\partial {{\\theta }_{j}}}J\\left( \\theta  \\right)$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "#梯度下降函数\n",
    "def gradientDescent(X, y, theta, alpha, epoch):\n",
    "    _theta = np.matrix(np.zeros(theta.shape))\n",
    "    n_theta = int(theta.ravel().shape[1])\n",
    "    data_cost = np.zeros(epoch)\n",
    "    #时间复杂度0(iters)*0(theta_n)接近0(iters^2)\n",
    "    for i in range(epoch):\n",
    "        #偏导数中共同部分求和\n",
    "        inner = (X*theta.T) - y\n",
    "        for j in range(n_theta):\n",
    "            #偏导数\n",
    "            partialDerivative = np.sum(np.multiply(inner, X[:,j]))\n",
    "            #根据公式求解theta0,theata1\n",
    "            _theta[0,j] = theta[0,j] - (alpha/len(X) * partialDerivative)\n",
    "        theta = _theta #同步更新的关键\n",
    "        #把每次更新theta后的损失值存储起来,方便画图比较\n",
    "        data_cost[i] = computeCost(X, y, theta)\n",
    "    return theta, data_cost"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false,
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "#初始化变量,进行梯度下降\n",
    "alpha = 0.01\n",
    "epoch = 1000\n",
    "theta, cost_data = gradientDescent(X, y, theta, alpha, epoch)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(matrix([[-3.24140214,  1.1272942 ]]),\n",
       " array([ 4.51623786,  4.51609643,  4.5159555 ]))"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "theta,cost_data[-3:]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 绘制数据的线性模型在原始数据上的分布,直观地看出它的拟合程度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+0AAAK9CAYAAABRvo1QAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3Xl4XGXZx/HvTV5lkyUioiigNklBULBFKciqwYZURHFN\nFwREAeGlVuRlFQoqCCi7iCIFJRCogoDSNhJ21LIUkJ1JAgiCLNKy7+nz/nGmGIZ0S5Ock+T7ua65\nOnPOmTP3zJxCf/NskVJCkiRJkiQVz3J5FyBJkiRJknpmaJckSZIkqaAM7ZIkSZIkFZShXZIkSZKk\ngjK0S5IkSZJUUIZ2SZIkSZIKytAuSZIkSVJBGdolSZIkSSooQ7skSZIkSQVlaJckDaiI2CYi5kfE\n1t22nRMRD+ZZV3c91VgEEVEVEcdFxMMR0RURF5e3z4+Iw/OubzCLiKkRMb+Pz1nI62gBrxtJGhwM\n7ZI0jETEN8v/UF9wezki7o+IUyPivQNYSurh8VIHpog4OCJ26puS3qayxiL4FvADYDqwC3BieXui\nW70RsXlEHBERqw58iW8XEddUXHdPR8RNEbFbRETe9ZW95TNcGhGxd0R8cxHnLapev2dJ0sD5n7wL\nkCQNuAT8EHgIWAHYEtgb2CEiNkopvZJDTXvQux+SDwF+D1zat+UU1nbAv1JKP6jYviLwRrfHWwCH\nA2cDzw1QbYuSgEeAg4AA1iT70eEsoJbsexzMvgs8Bfy2+8aU0rURsWJK6bV8ylqsyutGklRAhnZJ\nGp5mpZRuLd+fFhFzgSnATsCFPT0hIlZKKb3UH8WklLqArv44d1GVW5jfmVJ6dSme9l7gmcqNPYTC\norRed/dsSqllwYOI+DVwP7BvRPywfA0MOQUO7IWuTZL0X3aPlyQBXEUW9D4MEBG7LhiLGxGnR8QT\nZC2llPevHRHTIuLxiHglIu6KiN0qTxoRH4iISyLihYh4IiJOAJanIlT2NKY9MpMj4o5yN/4nI2Jm\nRIwq758PrAQsqHV+REzrrxp7smAcdESMjIjpEfFsRPwnIk6KiOUrjp0fEadExPiIuAt4BRhb3rdS\nRPy8PFb9lYi4LyL27/bc9crvd1tgo/K5uhaMle4+NjkijgCOKz/1oW7HrruQ93BqRDwfESv0sK8l\nIh5b0IU9IjaNiNaIeCoiXoqIByLirMV9Tj1JKb0MzAZWJmt5X/CaX42IW8rnfyoizo2ItSvqOqdc\n84fL9bwQEY9GxA8rjutxTPmCzzMidllUjeXu+1eWr4tXIuLuiNir4pgHgQ2Bbbtdh1ct5vWX5j2u\nXb4+ny//HTh+wfexmNoX+11VXDfrxVuHMLzlVvG8zSJiVkQ8ExEvRjb8YYvF1SRJ6h1b2iVJADXl\nP58u/7lgnOvpwJPAkWThisjGvt9I1jJ+CvAfYAfgrIhYJaV0Svm4Fch+DPggcDLwb2AS8Bl6HtNe\nuW0a8E3gcuBMsv9nbQWMAW4FJpJ1r74R+HX5OZ39WGNPFhwzHXiQrPv3GGA/YHVg14rjPwt8DTit\nXNND5e1/ArYBfgP8gyzMHx8Ra6eU9ifrej0ROIzse1jQzfzeHmq6GKgDvgFM5r/f6VMLeQ8XknXv\nHgdctGBjRKwIfB6YllJKEbEm0Ep2PRxD1uL/IWDnhZx3SYwg+46eKb/mrmTf+41k73Et4HvAFhHx\niZTSgq7+iazhYRbwd+AAoAE4MiKqUkpTu73GsozZ3gu4i2z4xRvAjsDpEREppV+Wj5lM9n0+D/yY\n7Ht5YmGv34v32Er248b+QD3wfaAD+NXCiu7ld7XgGuvuHcBJZD8wLTj3Z4AZwC3AVLK5KHYDroqI\nLVNKtyziNSRJvZFS8ubNmzdvw+RGFoK7yMZGrwF8APg62T/YXwDe3+24+cA1QFSc4zfAv4DVK7af\nD8wFli8/nlx+rZ27HbMCUCpv37rb9rOBB7o93q78+ics5v08TxYqK7f3eY0Lef0jynVeXLH9tPLz\nN+q2bT7wOjCy4tidyvsOqtg+nSwofrjbtquBO3qoYz5weLfH+5dff90lvC4eAaZXbPtq+RxbdKuz\nC/hEL667q4G7y9fcGsBIsh9J5gN/LB/zP8DjwO1kwwYWPLexfNwRFddLF3Bixev8CXgZeHf58TY9\nfY/AeuVz7lLxXXZVHLd8D+9lJtBese1O4Koejn3L6/fyPR5Scc45wE2L+byX6LuqvG562P8L4DXe\n+nf1fuDyys+J7AezWUt7bXjz5s2bt8Xf7B4vScNPAFeSBfVHyILsc8AXU0r/7nZcAs5MKVW2VO5M\nFo6qImKNBTfgL2Sty6PKx+0A/DuldPGbJ8wmufs1i/dlskBx1NK+uQGs8c2nkIWb7k4l+5wbK7Zf\nk1K6v2LbDmTh/NSK7T8na2ndYSlq6a3fA40RsVK3bV8HHk0p/a38+Bmy9/SFiOhNT70NyK65p8h6\nCOxD9h19q7x/U7Ix+6enbmOtU0ozgPvIegJUqvzcTyMLkPW9qO9tUrf5BiJi1fI1dB3wkYhYpRen\n7M17rGxRvx74yGJeZ1m/K8pDB/YGDkgpXVfetgnZxIEtFX+vViH7b0ohl7aTpMHO7vGSNPwksu7Q\n7WRh8YkeguQCD3V/UO52uzrwHWDPhZx7wdJx65F14620sNfq7iPAYymlt026tjgDWGN3lefoJPvR\n4UMV2x/q4bnrkb3XFyu239ttf3+7kKyL9heACyJiZbIfCxZ0ASdlM6H/gWxW+ikRcQ1wCXB+WrIJ\nzR4kWyUAsu7W7Sml/3Tbvx7Zd1Pq4bn3AZ+u2DYfeKBi24LnfmgJ6lmsiPg02dCQMWTzJyyQgNXI\nenosjaV9j6+klJ6u2DYPqF7Uiyzrd1UO578EzkspndxtV235z98t5KnzI2K1lNKzi3sNSdKSM7RL\n0vB0c/rv7PGL8nLF4wU9tJqpWN6qmzt6XVXfKEKNCxtHXfl5FkJK6caIeIhsvP0FZOF9BSpWEkgp\nfS0iPkU2tnss2djs70fEmLT4lQVeTCld3efFL9rCvoeqxT0xIj4CtJH9eDKFrFfKa2St4d9jYCbz\n7fWM+r39riJidbK5De4Dvl2xe8F73p9s7oWevNDbmiVJPTO0S5KWxlNkrYtVKaWrFnPsP8lm1a60\n/hK8TifwuYhYfTGt7T2FsoGqsbva8rkWqCELOA8twXP/CXw2IlauaG3foNv+pdWbydemA/tFxLvI\nusY/lFK6+W0nTukm4CbghxHRBJxHNundtMpjl9I/ybp0jySbS6G7kbz9c1iOrEdGR8Vx8N/PfV75\nnKtXPPdDS1DPjsA7gR1TSo8u2BgRn+3h2CX9vJf2PS6Tpf2uyrPSnw+sCmxXHirSXWf5z+eX4O+W\nJKmPOKZdkrTEUkrzyVrhvhwRbwu7EfGebg9nAGtHxJe77V+Jt7fe9eQisv9HHbGY416kIpANYI1v\nPoVsfHZ3+5EFuZlL8PwZZD+i71uxfQpZF/AlOUelBeG/MqwuyoVk48F3JWuZfUsre7kFttKC1tbl\ne9i3tG4hm+18r4h4R7fX3YHsB4w/9/Ccys9sX7LW8CvLj/9JeSK4iuO+y+KD9oJW7jf/rRQRq/H2\nFQGgh+twIXrzHpfaMnxXU4HtgW+klB7uYf8csuD+g/IQisrXfc/bnyJJWla2tEvS8LPYNZ4Xc9xB\nZOuF3xgRZwL3AO8GRpMtlbbgH+5nkoWocyNiU/67nFrl2O23SSldExHnkrX81pEt7bUc2ZJvV6WU\nTi8fOgeoj4gpwGPAg+XWxX6vscKHI+LScp1bABOA5pTSnUvw3D+Rza7+k4j4MP9d8m1HstnRH1zU\nkxdiDtn3d3REXEA2a/1lKVsbvUcppdsiohP4CVkL8/SKQ74ZEd8F/kgW3FYh+3HjWbIfHpZJSumN\niDiQrBX4uohoAd5H9gPIA2RLj3X3KtAQEeeQLZ/WSDYO/ycLxoGnlJ6LiN+TXUeU6/483daFX4S/\nkH1uf46IX5G93z3IlnN7X8Wxc8iC+KFkLf9PdhsK8Obfo168x95a6u8qIjYiW1LwWuB9ETGh+/6U\n0nkppRQRe5TPcXdEnA08SrYKxXbl8+/UR+9BklRmaJek4WdJu/L2eFxK6cnyWNnDgS+RzTD9NNmS\nXv/X7biXy2s6n0oWjF8iG2c+q3xb3OvtShZgvwUcRxYIbgH+1u2Y75PNrv0jYEWyMew39WONPX4k\nZN3Jf0S2JvYbZGvD/18Px73tMy0HoR3JZsr/evl9PwT8IKV04kJer6dtb25PKd0SEYeRrTM+luwH\njw8DPbWednchcAjZJHG3V+y7Fvhkuca1yL6PG4HxKaUl6da92OsupfTbiHiR7EeXn5L9eHIR2XJ4\nz1Uc/gbZ2uxnkF0fzwNTU0o/qjjuf8n+vbMnWdC/EPgB2frrC60xpVQq98D4MXA82VJtp5NdR2dV\nPO8oYF2y9eJXIfusFoT2t7zvpXyPC/vMFvdZLul31f26WaP85zblW6XzyvVfGxGbAz8k62HyLrLP\n5kYWsXa8JKn34u0r+UiSpCUREUeQ/TCwZkppbt71DBflFt4vp5RWzbsWSZL6W6HGtEfEXhHxj4h4\ntnz7W0Q0VBxzVEQ8FhEvRcQVEVGTV72SJEmSJPWnQoV2suVUDgRGkY07vAq4NCI2ACiPA9uXbO3d\nT5F1KWuNiHfmU64kSZIkSf2nUKE9pXR5SmlWSqkzpdSRUjqMbL3PMeVDJgM/Sin9OaV0F7ALsDbw\nxZxKliRJ+XB8nyRpWCjsmPaIWA74GnA2sAnZEi6dwCYppTu6HXcNcFtKaUoedUqSJEmS1F8KN3t8\necmRvwMrkM0E+6WU0v3lmUoT2VIr3fW09IokSZIkSYNe4UI7cB+wMbAa8BXgdxGxdW9PFhFrkC13\n8xDwSl8UKEmSJEnSIqwAfAhoTSk9vSwnKlxoTym9ATxQfnhbeZ3dyWRrsAbZeqPdW9vXAm5bxCnH\nUl5bVJIkSZKkATQBOH9ZTlC40N6D5YDlU0oPRsTjwGeBOwAiYlVgM+AXi3j+QwDNzc1ssMEG/Vyq\nlJ8pU6Zw4okn5l2G1K+8zjUceJ1rOPA611B37733MnHiRCjn0WVRqNAeEUcDM4GHgVXIfpXYBvhc\n+ZCTgMMiooPszf8I+Bdw6SJO+wrABhtswKhRo/qncKkAVlttNa9xDXle5xoOvM41HHidaxhZ5iHa\nhQrtwHuB3wLvB54la1H/XErpKoCU0nERsRLwK2B14Hpgh5TSaznVK0mSJElSvylUaE8p7bEEx0wF\npvZ7MZIkSZIk5Wy5vAuQJEmSJEk9M7RLQ0RTU1PeJUj9zutcw4HXuYYDr3NpyUVKKe8a+lVEjALm\nzJkzx8kuJEmSJEn97tZbb2X06NEAo1NKty7LuWxplyRJkiSpoAztkiRJkiQVlKFdkiRJkqSCMrRL\nkiRJklRQhnZJkiRJkgrK0C5JkiRJUkEZ2iVJkiRJKihDuyRJkiRJBWVolyRJkiSpoAztkiRJkiQV\nlKFdkiRJkqSCMrRLkiRJklRQhnZJkiRJkgrK0C5JkiRJUkEZ2iVJkiRJKihDuyRJkiRJBWVolyRJ\nkiSpoAztkiRJkiQVlKFdkiRJkqSCMrRLkiRJklRQhnZJkiRJkgrK0C5JkiRJUkEZ2iVJkiRJKihD\nuyRJkiRJBWVolyRJkiSpoAztkiRJkiQVlKFdkiRJkqSCMrRLkiRJklRQhnZJkiRJkgrK0C5JkiRJ\nUkEZ2iVJkiRJKihDuyRJkiRJBWVolyRJkiSpoAztkiRJkiQVlKFdkiRJkqSCMrRLkiRJklRQhnZJ\nkiRJkgrK0C5JkiRJUkEZ2iVJkiRJKihDuyRJkiRJBWVolyRJkiSpoAztkiRJkiQVlKFdkiRJkqSC\nMrRLkiRJklRQhnZJkiRJkgrK0C5JkiRJUkEZ2iVJkiRJKihDuyRJkiRJBWVolyRJkiSpoAztkiRJ\nkiQVlKFdkiRJkqSCMrRLkiRJklRQhnZJkiRJkgrK0C5JkiRJUkEZ2iVJkiRJKihDuyRJkiRJBWVo\nlyRJkiSpoAztkiRJkiQVlKFdkiRJkqSCMrRLkiRJklRQhnZJkiRJkgrK0C5JkiRJUkEZ2iVJkiRJ\nKihDuyRJkiRJBWVolyRJkiSpoAztkiRJkiQVlKFdkiRJkqSCMrRLkiRJklRQhnZJkiRJkgrK0C5J\nkiRJUkEZ2iVJkiRJKihDuyRJkiRJBWVolyRJkiSpoAztkiRJkiQVlKFdkiRJkqSCKlRoj4iDI+Km\niHguIp6IiD9GRF3FMWdHxPyK24y8apYkSZIkqb8UKrQDWwGnApsB9cA7gL9ExIoVx80E1gLeV741\nDWSRkiRJkiQNhP/Ju4DuUkqN3R9HxK7Ak8Bo4IZuu15NKT01gKVJkiRJkjTgitbSXml1IAFzK7Zv\nW+4+f19EnB4R786hNkmSJEmS+lWhWtq7i4gATgJuSCnd023XTOAi4EFgBHAMMCMiNk8ppYGvVJIk\nSZKk/lHY0A6cDnwU+HT3jSml6d0e3h0RdwKdwLbA1Qs72ZQpU1httdXesq2pqYmmJofDS5IkSZJ6\np6WlhZaWlrdse/bZZ/vs/FHExumIOA3YEdgqpfTwEhz/JHBoSunMHvaNAubMmTOHUaNG9X2xkiRJ\nkiR1c+uttzJ69GiA0SmlW5flXIVraS8H9p2AbZYwsH8QWAP4d3/XJkmSJEnSQCrURHQRcTowARgP\nvBgRa5VvK5T3rxwRx0XEZhGxXkR8FrgEKAGt+VUuSZIkSVLfK1RoB/YCVgWuAR7rdvtaeX8X8HHg\nUuB+4EzgZmDrlNLrA12sJEmSJEn9qVDd41NKi/wRIaX0CtAwQOVIkiRJkpSrorW0S5IkSZKkMkO7\nJEmSJEkFZWiXJEmSJKmgDO2SJEmSJBWUoV2SJEmSpIIq1OzxkiRJkqTFK5VKdHZ2UlNTQ21tbd7l\nqB/Z0i5JkiRJg8TcuXNpaBjHyJEjaWxspK6ujoaGccybNy/v0tRPDO2SJEmSNEiMHz+JtrbZQDPw\nMNBMW9tsmpom5lyZ+ovd4yVJkiRpECiVSrS2ziAL7BPKWyfQ1ZVobZ1Ee3u7XeWHIFvaJUmSJGkQ\n6OzsLN/bumLPNgB0dHQMaD0aGIZ2SZIkSRoERowYUb53XcWeawGoqakZ0Ho0MAztkiRJkjQI1NXV\nMXZsI1VV+5F1kX8EaKaqajJjxzbaNX6IMrRLkiRJ0iDR0tJMff0YYBKwLjCJ+voxtLQ051yZ+osT\n0UmSJEnSIFFdXc2sWZfT3t5OR0eH67QPA4Z2SZIkSRpkamtrDevDhN3jJUmSJEkqKEO7JEmSJEkF\nZWiXJEmSJKmgDO2SJEmSJBWUoV2SJEmSpIIytEuSJEmSVFCGdkmSJEmSCsrQLkmSJElSQRnaJUmS\nJEkqKEO7JEmSJEkFZWiXJEmSJKmgDO2SJEmSJBWUoV2SJEmSpIIytEuSJEmSVFCGdkmSJEmSCsrQ\nLkmSJElSQRnaJUmSJEkqqP/JuwBJkiRJfatUKtHZ2UlNTQ21tbV5lyNpGdjSLkmSJA0Rc+fOpaFh\nHCNHjqSxsZG6ujoaGsYxb968vEuT1EuGdkmSJGmIGD9+Em1ts4Fm4GGgmba22TQ1Tcy5Mkm9Zfd4\nSZIkaQgolUq0ts4gC+wTylsn0NWVaG2dRHt7u13lpUHIlnZJkiRpCOjs7Czf27pizzYAdHR0DGg9\nkvqGoV2SJEkaAkaMGFG+d13FnmsBqKmpGdB6JPUNQ7skSZI0BNTV1TF2bCNVVfuRdZF/BGimqmoy\nY8c22jVeGqQM7ZIkSdIQ0dLSTH39GGASsC4wifr6MbS0NOdcmaTeciI6SZIkaYiorq5m1qzLaW9v\np6Ojw3XapSHA0C5JkiQNMbW1tYZ1aYiwe7wkSZIkSQVlaJckSZIkqaAM7ZIkSZIkFZShXZIkSZKk\ngjK0S5IkSZJUUM4eL0mSJKlwSqUSnZ2dLlunYc+WdkmSJEmFMXfuXBoaxjFy5EgaGxupq6ujoWEc\n8+bNy7s0KReGdkmSJEmFMX78JNraZgPNwMNAM21ts2lqmphzZVI+DO2SJEmSCqFUKtHaOoOurlOA\nCcA6wAS6uk6mtXUG7e3tOVdYEE88AfvuC8cem3clGgCGdkmSJEmF0NnZWb63dcWebQDo6OgY0HoK\n57nn4IgjYMQIOO88WHnlvCvSADC0S5IkSSqEESNGlO9dV7HnWgBqamoGtJ7CePVVOOWULKwfdxzs\nsw888EDW2q4hz9AuSZIkqRDq6uoYO7aRqqr9yMa0PwI0U1U1mbFjG4ffLPLz52ct6uuvD1OmwE47\nQXt71i2+ujrv6jRADO2SJEmSCqOlpZn6+jHAJGBdYBL19WNoaWnOubIBlBLMnAmjRsHEibDJJnDX\nXfCb38AHP5h3dRpgrtMuSZIkqTCqq6uZNety2tvb6ejoGH7rtN94Ixx0EFxzDWy1Ffztb7D55nlX\npRwZ2iVJkiQVTm1t7fAK6/ffD4ccAhdfDB/7GPz5z9DYCBF5V6ac2T1ekiRJkvLy2GOw556w4YZw\nyy3w29/CbbfBuHEGdgG2tEuSJEnSwHvmmWwm+JNOgpVWguOPh733hhVWyLsyFYyhXZIkSZIGyiuv\nwGmnwdFHZ0u5ff/7cMABsNpqeVemgjK0S5IkSVJ/6+qC3/0Ojjgi6xL/7W/D4YfD+9+fd2UqOMe0\nS5IkSSq0UqnEzJkzaW9vz7uUpZcSXHYZbLwx7L47jBkD99wDv/ylgV1LxNAuSZIkqZDmzp1LQ8M4\nRo4cSWNjI3V1dTQ0jGPevHl5l7Zk/vrXbNm2nXaCtdaCm2+G6dOhri7vyjSIGNolSZIkFdL48ZNo\na5sNNAMPA820tc2mqWlizpUtxt13Z0F9yy3hxRehtRXa2mDTTfOuTIOQoV2SJElS4ZRKJVpbZ9DV\ndQowAVgHmEBX18m0ts4oZlf5hx+G3XaDj38c7roLzj8f5syBz33O5dvUa4Z2SZIkSYXT2dlZvrd1\nxZ5tAOjo6BjQehbp6afhBz/Iur3PmAEnnwz33gtNTbCckUvLxtnjJUmSJBXOiBEjyveuI2tpX+Ba\nAGpqaga6pLd76aUsoB97bDY7/CGHwJQpsMoqeVemIcTQLkmSJKlw6urqGDu2kba2/ejqSmQt7NdS\nVTWZ+vpGamtr8yvujTdg2jSYOhX+8x/Ye2849FB473vzq0lDln01JEmSJBVSS0sz9fVjgEnAusAk\n6uvH0NLSnE9BKcFFF8GGG8Kee8J228F992Wt7QZ29RNb2iVJkiQVUnV1NbNmXU57ezsdHR3U1NTk\n18J+9dVw0EFw003Q0AAXXgibbJJPLRpWDO2SJEmSCq22tja/sH777XDwwTBrFnzyk3DVVVkLuzRA\n7B4vSZIkSZUefBAmToRPfAIeeAB+/3u48UYDuwacoV2SJEmSFnjqKZg8GUaOzFrVzzgjW3P9K19x\nrXXlwu7xkiRJkvTCC3DCCXD88VBVBUcemYX3lVbKuzINc4Z2SZIkScPXa6/BmWfCUUfBs8/Cvvtm\nY9jXWCPvyiTA7vGSJEmShqP586GlBTbYAPbbDxoboVSCn/3MwK5CMbRLkiRJGj5SgtZW2HRTGD8e\nNtoI7rgDzj4b1l037+qktylUaI+IgyPipoh4LiKeiIg/RkRdD8cdFRGPRcRLEXFFRNTkUa8kSZKk\nQeTmm6G+PltnfcUV4frr4dJLYcMN865MWqhChXZgK+BUYDOgHngH8JeIWHHBARFxILAv8B3gU8CL\nQGtEvHPgy5UkSZJUeKUSfO1r8KlPweOPZ0H9hhtgyy3zrkxarEJNRJdSauz+OCJ2BZ4ERgM3lDdP\nBn6UUvpz+ZhdgCeALwLTB6xYSZIkScX2739ns8D/5jfw/vfDtGmwyy7Z7PDSIFG0lvZKqwMJmAsQ\nER8G3gdcueCAlNJzwI3A5nkUKEmSJKlgnn0WDj0Uampg+nT46U+z1vbddjOwa9ApVEt7dxERwEnA\nDSmle8qb30cW4p+oOPyJ8j5JkiRJw9Urr8Dpp8NPfgIvv5yts37ggbD66nlXJvVaYUM7cDrwUeDT\neRciSZIkqcC6uqC5GQ4/HB59FHbfHY44Aj7wgbwrk5ZZIUN7RJwGNAJbpZT+3W3X40AAa/HW1va1\ngNsWdc4pU6aw2mqrvWVbU1MTTU1NfVKzJEmSpAGWElx+ORx8MNx1F+y8c7ac2/rr512ZhpGWlhZa\nWlresu3ZZ5/ts/NHSqnPTtYXyoF9J2CblNIDPex/DDg+pXRi+fGqZAF+l5TS73s4fhQwZ86cOYwa\nNap/i5ckSZI0MP72t6zr+w03wDbbwLHHwmab5V2VBMCtt97K6NGjAUanlG5dlnMVaiK6iDgdmACM\nB16MiLXKtxW6HXYScFhE7BgRHwN+B/wLuHTgK5YkSZI0oO65B774Rfj0p+H552HGDLj6agO7hqyi\ndY/fi2yiuWsqtu9GFs5JKR0XESsBvyKbXf56YIeU0msDWKckSZKkgfTIIzB1KpxzDqy7Lpx7Lowf\nD8sVqh1S6nOFCu0ppSX6G5dSmgpM7ddiJEmSJOVv7txsybZTToFVVoETT4Q994Tll8+7MmlAFCq0\nS5IkSRIAL70Ep56aBfbXX8/Gr++/P6y6at6VSQPK0C5JkiSpON54A84+O+sK/+ST8J3vZEu5rbVW\n3pVJuXAAiCRJkqT8pQR//CNstFEW1LfeGu69F37xCwO7hjVDuyRJkqR8XXstbLFFts76euvBnDnQ\n0gI1NXlXJuXO0C5JkiQpH3fcAePGwbbbZt3i29qgtRVGjcq7MqkwDO2SJEmSBtZDD8Euu8Amm0Cp\nBBdeCDfdBJ/9bN6VSYVjaJckSZI0MJ56Cr73PRg5Eq64Ak4/He65B772NYjIuzqpkJw9XpIkSVL/\neuGFbH3144/PHh9+eBbeV14537qkQcDQLkmSJKl/vP46nHkmHHUUzJsH++wDhxwC73lP3pVJg4bd\n4yVJkiT1rfnzs3HqG2wA++4LY8dmY9dPOMHALi0lQ7skSZKkvtPWBp/8JHzjG7D++vCPf8Bvf5st\n5SZpqRlAhd8TAAAgAElEQVTaJUmSJC27OXNg++2z2/LLw3XXwZ//DB/7WN6VSYOaoV2SJElS73V0\nZK3qm24Kjz4Kf/wj/PWvsNVWeVcmDQmGdkmSJElL7/HHs4nlNtgAbrgBfvMbuOMO+OIXXb5N6kPO\nHi9JkiRpyT33HPzsZ9mkcu94Bxx9dDbZ3Ior5l2ZNCQZ2iVJkiQt3quvwhlnwI9/nK27vt9+cNBB\nUF2dd2XSkGZolyRJkrRw8+fD+efDD38IDz8Mu+8ORxwBH/xg3pVJw4KhXZIkSdLbpQSzZmWt6Xfc\nAV/6EsyYkY1hlzRgnIhOkiRJ0lvdeCNstx00NsLqq8Pf/gYXX2xgl3JgaJckSZKUue8++PKXYcwY\nmDs3W2f9mmtg883zrkwatgztkiRJ0nD36KPwne/ARhvBnDnwu9/BbbfBuHEu3yblzDHtkiRJ0nD1\nzDNw7LFw8smw0krZUm577w3LL593ZZLKDO2SJEnScPPyy3DaaXDMMdlSbt//PhxwAKy2Wt6VSapg\naJckSZKGizfeyLq+H3EEPP44fPvb2VJu739/3pVJWgjHtEuSJElDXUpw6aWw8cbwrW/BFlvAPffA\n6acb2KWCM7RLkiRJQ9n118OWW8IXv5gF9FtugQsvhNravCuTtAQM7ZIkSdJQdNddsOOOsPXW8Mor\n8Je/QFsbjB6dd2WSloKhXZIkSRpKHn4Ydt0VPv5xuPdeaGmBm2+G7bfPu7IhoVQqMXPmTNrb2/Mu\nRcOEoV2SJEkaCp5+GvbfH+rqYOZMOPXUbNz6N74By/nP/mU1d+5cGhrGMXLkSBobG6mrq6OhYRzz\n5s3LuzQNcf7tlSRJkgazF1+Eo4+Gj3wEfv1rOOQQ6OyEffaBd74z7+qGjPHjJ9HWNhtoBh4Gmmlr\nm01T08ScK9NQ55JvkiRJ0mD0+uswbRpMnZq1sn/3u3DoobDmmnlXNuSUSiVaW2eQBfYJ5a0T6OpK\ntLZOor29nVon9lM/saVdkiRJGkxSgj/8ATbaCPbeG+rr4f774aSTDOz9pLOzs3xv64o92wDQ0dEx\noPVoeDG0S5IkSYPF1VfDZpvBV7+adYe/7TY491z48IfzrmxIGzFiRPnedRV7rgWgpqZmQOvR8GJo\nlzQgnGlVkqRlcPvt0NAAn/kMRGThfeZM2HjjvCsbFurq6hg7tpGqqv3Iusg/AjRTVTWZsWMb7Rqv\nfmVol9SvnGlVkqRl8MADMGECfOIT8OCDcNFFMHs2bLtt3pUNOy0tzdTXjwEmAesCk6ivH0NLS3PO\nlWmoM7RL6lfOtCpJUi88+STstx+sv37Wqv7rX8Pdd8POO2ct7Rpw1dXVzJp1OaVSiRkzZlAqlZg1\n63Kqq6vzLk1DnLPHS+o3zrQqSdJSev55OOEE+NnPoKoKjjwSJk+GlVbKuzKV1dbW+u8XDShb2iX1\nG2dalSRpCb32Gpx6KowYAcccA3vtla21fvDBBnZpmDO0S+o3zrQqSdJizJ8P558PG2wA3/sefP7z\n0N4Oxx8Pa6yRd3WSCsDQLqnfONOqJEkLkRK0tsLo0dlEcxttBHfcAdOmwTrr5F2dpAIxtEvqV860\nKklShZtugs9+NlvCbeWV4YYb4NJLYcMN865MUgE5EZ2kfrVgptX29nY6OjqoqamxhV2SNDyVSnDo\nofCHP2QB/bLLsu7wzgYvaREM7ZIGhDOtSpKGrccey2aBP+ssWHttOPtsmDQpmx1ekhbD0C5JkiT1\nh2eegeOOg5NOghVXhGOPhX32gRVW6PeXLpVKdHZ22sNNGgIM7ZIkSVJfeuUV+MUv4Oij4eWXYcoU\nOOAAWH31fn/puXPnMn78JFpbZ7y5bezYRlpamqmuru7315fU95yITpIkSeoLXV1wzjlQVwcHHghf\n/Sp0dMBPfjIggR1g/PhJtLXNJlu15WGgmba22TQ1TRyQ15fU9wztkiRJ0rJICf70J9h4Y9htN/jU\np+Duu+GMM7Ix7AOkVCrR2jqDrq5TgAnAOsAEurpOprV1Bu3t7QNWi6S+Y2iXJEmSeuuvf4WttoIv\nfAHWXBNuvDGbHX7kyAEvpbOzs3xv64o92wDQ0dExoPVI6huGdkmSJGlp3XMP7LQTbLklvPACzJwJ\nV12VtbLnZMSIEeV711XsuRaAmpqaAa1HUt8wtEuSJElL6pFHYPfd4WMfgzvvhOZmuPVWaGjIfb31\nuro6xo5tpKpqP7Ix7Y8AzVRVTWbs2EZnkZcGKUO7JEmStDhz52YzwNfWZuPXTzwR7r0XJkyA5Yrz\nT+qWlmbq68cAk4B1gUnU14+hpaU558ok9ZZLvkmSJEkL89JLcMop8NOfwhtvZLPC778/rLpq3pX1\nqLq6mlmzLqe9vZ2Ojg7XaZeGAEO7JEmSVOmNN2DaNDjySHjySdhrLzjsMFhrrbwrWyK1tbWGdWmI\nKE5fHkmSJClvKcHFF8NGG8Gee8LWW8N998Gppw6awC5paDG0S5IkSQDXXAObbw5f/jKstx7MmQMt\nLfDmrOySNPAM7ZIkSRre/vEPaGyE7baDri648kpobYVRo/KuTJIM7ZIkSRqmHnwQJk2CT3wCOjpg\n+nS46Sb4zGfyrkyS3mRolyRJ0vDy1FMweTKMHJm1qv/yl3D33fDVr+a+1rokVXL2eEmSJA0PL7yQ\nra9+/PFZOJ86NQvvK6+cd2WStFCGdkmSJA1tr70GZ54JP/oRzJsH++4LhxwCa6yRd2WStFh2j5ck\nSdLQNH8+XHABfPSj8L//Cw0NUCrBz39uYJc0aBjaJUmSNPRccQV88pPQ1AQbbJDNEH/OOdlSbpI0\niBjaJUmSNHTMmQPbbw+f+xyssAJcfz386U/wsY/lXZkk9YqhXZIkSYNfezt8/euw6abw6KNwySVw\nww2w5ZZ5VyZJy8TQLkmSpMHr8cfhu9/Nxq3/7W9w1llwxx2w004u3yZpSHD2eEmSJA0+zz2XLd12\nwgmw/PJw9NHZrPArrph3ZZLUpwztkiRJGjxefRV++Uv48Y/hxRezddYPPBCqq/OuTJL6haFdkiRJ\nxdfVBeedB4cfDo88ArvvDlOnwgc+kHdlktSvDO2SJEkqrpRg5kw46CC4807YeWeYNQvWXz/vyiRp\nQDgRnSRJkopp9mzYdlsYNw7e/W74+9/hoosM7JKGFUO7JElSN6VSiZkzZ9Le3p53KcPXffdlLeqb\nbw7PPAMzZsDVV8OYMXlXJkkDztAuSZIEzJ07l4aGcYwcOZLGxkbq6upoaBjHvHnz8i5t+Hj0Ufj2\nt2HDDeHWW+Hcc+G222CHHVy+TdKwZWiXJEkCxo+fRFvbbKAZeBhopq1tNk1NE3OubBiYNy8bs15T\nA5dcki3jdv/9MHEiLOc/VyUNb05EJ0mShr1SqURr6wyywD6hvHUCXV2J1tZJtLe3U1tbm2OFQ9TL\nL8Npp8Exx8Brr8EBB8APfgCrrpp3ZZJUGP50KUmShr3Ozs7yva0r9mwDQEdHx4DWM+S98QZMmwZ1\ndXDIIdDUBB0dcNRRBnZJqmBolyRJw96IESPK966r2HMtADU1NQNaz5CVUtb9/eMfh299Cz79abj3\nXvjFL+B978u7OkkqJEO7JEka9urq6hg7tpGqqv3Iusg/AjRTVTWZsWMb7RrfF66/PgvpX/oSfOAD\ncMstcMEF2Th2SdJCGdolSZKAlpZm6uvHAJOAdYFJ1NePoaWlOefKBrk774TPfx623hpefRX+8he4\n4goYPTrvyiRpUChUaI+IrSLisoh4NCLmR8QXKvafXd7e/TYjr3olSdLQUV1dzaxZl1MqlZgxYwal\nUolZsy6nuro679IGp3/+E775Tdh442zd9QsugJtvhu23z7sySRpUijZ7/MrA7cBZwMULOWYmsCuw\nYLHOV/u/LEmSNFzU1tbaHX5Z/Oc/cPTR2Tj16upsdvg99oB3vjPvyiRpUCpUaE8pzQJmAURELOSw\nV1NKTw1cVZIkSVqsF1+Ek06C447LJpw77DCYMgXe9a68K5OkQa1QoX0JbRsRTwDzgKuAw1JKc3Ou\nSZIkaXh6/XU46yw48kh4+mn47nfh0ENhzTXzrkyShoRCjWlfAjOBXYDPAP9HtnjqjEW0ykuSJKk/\npAS//z1suGEW1LffHkqlrLXdwC5JfWZQtbSnlKZ3e3h3RNwJdALbAlcv6rlTpkxhtdVWe8u2pqYm\nmpqa+rpMSZKkoe2qq+DAA7Nl2xob4Q9/yNZel6RhqKWlhZaWlrdse/bZZ/vs/JFS6rOT9aWImA98\nMaV02WKOexI4NKV05kL2jwLmzJkzh1GjRvVDpZIkScPEbbfBQQdly7Ztthkceyxss03eVUlS4dx6\n662Mzpa2HJ1SunVZzjXYuse/RUR8EFgD+HfetUiSpKVXKpWYOXMm7e3teZeiRenshPHjYdSobCm3\niy+Gv//dwC5JA6BQoT0iVo6IjSNik/Kmj5Qfr1Ped1xEbBYR60XEZ4FLgBLQml/VkiRpac2dO5eG\nhnGMHDmSxsZG6urqaGgYx7x58/IuTd098QT87//C+uvDtdfCmWfCXXfBl74ETikkSQOiUKEd2BS4\nDZgDJODnwK3AkUAX8HHgUuB+4EzgZmDrlNLruVQrSZJ6Zfz4SbS1zQaagYeBZtraZtPUNDHnygTA\n88/D1KlQUwPnngs//jG0t2frrf/PoJoSSZIGvUL9VzeldC2L/iGhYaBqkSRJ/aNUKtHaOoMssE8o\nb51AV1eitXUS7e3t1NbW5ljhMPbqq/CrX2Uh/bnnslb2gw+Gd78778okadgqWku7JEka4jo7O8v3\ntq7Yk42P7ujoGNB6BMyfD+edBxtsAFOmwI47Zi3rxx9vYJeknBnaJUnSgBoxYkT53nUVe64FoKam\nZkDrGdZSgpkzswnmJk7Mlm2780446yxYZ528q5MkYWiXJEkDrK6ujrFjG6mq2o+si/wjQDNVVZMZ\nO7bRrvED5aab4DOfydZZX2UV+Otf4ZJL4KMfzbsySVI3hnZJkjTgWlqaqa8fA0wC1gUmUV8/hpaW\n5pwrGwbuvx++8pVsnfWnnoI//Qmuuw622CLvyiRJPSjURHSSJGl4qK6uZtasy2lvb6ejo4Oamhpb\n2PvbY4/BkUdmXd/XXhvOOSfrEl9VlXdlkqRFMLRLkqTc1NbWGtb72zPPwHHHwUknwYorZve/+11Y\nYYW8K5MkLQFDuyRJ0lD0yitw2mlw9NHZ/SlT4IADYPXV865MkrQUDO2SJElDSVcX/O53cMQRWZf4\nPfaAww/PusRLkgYdJ6KTJEkaClKCyy6DjTeG3XeHMWPgnnvgjDMM7JI0iBnaJUmSBrsbboCttoKd\ndoL3vjdbzm36dKiry7sySdIyMrRLkiQNVnfdBV/4QhbYX3wRZs2CK6+ET34y78okSX3E0C5JkjTY\nPPww7LZb1hX+rrvg/PNhzhwYOxYi8q5OktSHnIhOkiRpsHj6aTjmmGxW+FVXhZNPhu98B975zrwr\nkyT1E0O7JElS0b30UhbQjz02mx3+oINg//1hlVXyrkyS1M8M7ZI0hJRKJTo7O6mpqaG2tjbvciQt\nqzfegGnTYOpU+M9/YK+94LDDssnmJEnDgmPaJWkImDt3Lg0N4xg5ciSNjY3U1dXR0DCOefPm5V2a\npN5ICS66CDbaCPbcE7bbDu67D045xcAuScOMoV2ShoDx4yfR1jYbaAYeBpppa5tNU9PEnCuTtNSu\nuSZbY/0rX4EPfQhuuw3OOw8+8pG8K5Mk5cDQLkmDXKlUorV1Bl1dpwATgHWACXR1nUxr6wza29tz\nrlDDRalUYubMmV5zvfWPf8AOO2St6inBVVdlS7htsknelUmScmRol6RBrrOzs3xv64o92wDQ0dEx\noPVo+HF4xjJ68EGYOBE+8Ql44AH4/e/hxhuz8C5JGvYM7ZI0yI0YMaJ877qKPdcCUFNTM6D1aPhx\neEYvPfUUTJ4MI0dmrepnnJGtuf6Vr7jWuiTpTc4eL0mDXF1dHWPHNtLWth9dXYmshf1aqqomU1/f\n6Czy6lcLhmdkgX1CeesEuroSra2TaG9v9xqs9MILcMIJcPzxsNxycOSRsN9+sPLKeVcmSSogW9ol\naQhoaWmmvn4MMAlYF5hEff0YWlqac65MQ53DM5bCa6/BaafBiBHwk59ks8I/8AAcfLCBXZK0ULa0\nS9IQUF1dzaxZl9Pe3k5HR4frtGvAvHV4xoRuexye8ab58+HCC7P11R98EL75zax1fd11865MkjQI\n9Cq0R8S6wCMppVSxPYB1UkoP90VxkqSlU1tba1jXgHJ4xiKkBFdcAQcdlC3btuOOcOml2drrkiQt\nod52j38QWLOH7e8u75MkScOEwzN6cPPNUF8PY8fCiivC9dfDZZcZ2CVJS6233eMDSD1sfxfwSu/L\nkSRJg43DM7ppb8+6wU+fDh/9aNayvuOOzgYvSeq1pQrtEXFC+W4CfhQRL3XbXQVsBtzeR7VJkqRB\nZFgPz/j3v+Goo+A3v4H3vQ+mTYNddoGqqrwrkyQNckvb0v6J8p8BfAx4rdu+14B/AD/rg7okSZKK\n79lns6XbTjwRll8ejjkG9tkn6xIvSVIfWKrQnlLaDiAizgYmp5Se65eqJEmSiuzVV+H007Ol2156\nCSZPhgMPhNVXz7sySdIQ06sx7Sml3fq6EEmSpMLr6oLzzoPDD4d//Qu+9S044ghYe+28K5MkDVFL\nHNoj4mJg15TSc+X7C5VS2nmZK5MkSSqKlGDGjGz5trvugp13htZWGDky78okSUPc0rS0P8t/Z4x/\njp5nj5ckSRpaZs/Our5fdx1ss032eLPN8q5KkjRMLE1o/yPl5dxSSrv2SzWSJElFce+9cMghcMkl\n8PGPZy3tDQ0u3yZJGlDLLcWxfwRWB4iIroh4b/+UJEmSlKN//Qv22AM22ghuvx3OPRduuw122MHA\nLkkacEsT2p8CxpTvB3aPlyRJQ8m8eVk3+NpauPTSbBm3++6DiRNhuaX5J5MkSX1nabrHnwFcGhGJ\nLLA/Hgv5tTmlVNUHtUmSJPW/l1+GU0/N1lh//XX4v/+D/feHVVfNuzJJkpY8tKeUpkbEBUANcBmw\nG/BMfxUmSZLUr954A845B6ZOhSeegD33hB/+ENZaK+/KJEl601Kt055Sug+4LyKOBH6fUnqpf8qS\nJEnqJyllk8sdckjW/f3rX4cf/xhqavKuTJKkt+nVAK2U0pEppZciYs2I2LJ8W7Ovi5MkSepT110H\nW2yRrbO+zjpwyy1wwQUGdklSYfUqtEfEShExDXgMuK58eywizoqIlfqyQEmSpGV2553w+c9n66y/\n/jpccQX85S8wenTelUmStEi9nQr1RGAb4Atky8CtDuxU3vbzvilNkiRpGf3zn/DNb8LGG8P998OF\nF8JNN0F9fd6VSZK0RJZqTHs3Xwa+klK6ptu2GRHxMjAd2HtZC5MkFVupVKKzs5Oamhpqa2vzLkd6\nq//8B44+Gn7xC6iuzv7cYw94xzvyrkySpKXS29C+EvBED9ufLO+TJA1Rc+fOZfz4SbS2znhz29ix\njbS0NFNdXZ1jZRLw4ovZ+urHH59NOPfDH8L3vgfvelfelS2UP4BJkhalt93j/w4cGRErLNgQESsC\nR5T3SZJyVCqVmDlzJu3t7X1+7vHjJ9HWNhtoBh4Gmmlrm01T08Q+fy1pib3+Ovzyl9mEcj/6Eey+\nOzzwABx2WGED+9y5c2loGMfIkSNpbGykrq6OhoZxzJs3L+/SJEkF0tvQ/j3g08C/IuLKiLgSeATY\nApjcV8VJkpZOf4eAUqlEa+sMurpOASYA6wAT6Oo6mdbWGf3yI4G0SCnB9Onw0Y/CPvvA9ttnY9dP\nPBHe8568q1skfwCTJC2J3i75didQCxwM3F6+HQTUppTu7rvyJEkL01Nren+HgM7OzvK9rSv2bANA\nR0dHn7yOtESuvBI+9alsnfWRI+H22+F3v4MPfSjvyhbLH8AkSUtqqUN7RLyjvNzbWimlM1NK+/8/\ne3ceH2dZ7///dTWAKLJE+Ip6BI80i6xCC1hECmIwaaosLnjSNqAcURBohQOy7/4UBVkKoh4UkRPJ\nYRNEmwUj0IJYwJZVhEmCWtw4QEJBZE3v3x/3pCQle2bmvmfyej4eeZDMlk+HYeh7rs/1ubJfP4yi\n6KU81ChJOZPPtvFCGW41/b777st7CJg+fXr2u2XrXLMUgArPulYh3H8/1NbGE+DXWw+WLoVf/hJ2\n2inpysbMD8AkSWM17tAeRdFrxNPjJalolNLe0eFW04844ivZW+QvBFRVVVFbW09Z2cLs738SaKKs\nbBG1tfUO0VJ+dXdDQwPMmAGrVsHPfgZ33w2z133Np58fgEmSxmqie9pvBg7MZSGSlE+lsnd0pJba\nlSt/l71VfkNAc3MTNTWzgEZga6CRmppZNDc35eTxpTd56ik4+mj4wAfgzjvhiivg4YfhoIMghKSr\nmxA/AJMkjdVEj3zrBM4IIewJrABeHHhlFEWLJ1uYJOVKf9CN/2I8P3vpfPr6ItrbG+ns7CyavyCP\n1lI7Y8ZuPPjgQvr6ouxlSykrW0RNTe5CQHl5OW1tS+js7KSrq8tjqpQ/zz8P3/lO/LX++vD1r8Mx\nx8DbSuN02ebmJhoaFtDe3rj2spqaej8AkyQNMtHQ/p/Ac8DM7NdAEWBol5QaY9k7Wiyhc3BL7fwB\n18Sr6T/4weWcdtqZBQkBlZWVRfO8qci88gp8//txSH/hBVi4EE46Cd7xjqQryyk/AJMkjcWEQnsU\nRe/v/z6EuC8tiqIoV0VJUi6NFnSLae9of0ttR8fQq+m77rqrIUDFa80auOYaOP30eM/65z8PZ50F\nW22VdGV55QdgkqSRTHRPOyGE/wwhPAK8DLwcQngkhPDF3JUmSblRantHx7KnvLKykjlz5hTdn01T\nVBRBayvssgs0NsLOO8d71n/0o5IP7JIkjWZCK+0hhHOA44BLgd9mL94DuCiEsHUURWfkqD5JyolS\n2jtqS61Kyj33wIknxse27bUX/OY38OEPJ12VJEmpMdE97UcCh0dR1DzgsltCCA8RB3lDu6RUKcWg\na0utitpjj8Gpp8bHtu2wQ3zOen190U6DlyQpXyYa2tcHfjfE5Ssm8ZiSlHcGXSlhf/0rnH02XHkl\n/Nu/wU9+AvPnQ1lZ0pVJkpRKE93T/j/Eq+3r+hLw04mXI0mSStJzz8HJJ0NFRby6fv758PjjcMgh\nBnZJkkYwmVXx/wwhfBxYnv35Q8QTka4OIVzYf6Moio6bxO+QJEnF7KWX4LLL4JvfjI9y+6//ghNO\ngE03TboySZKKwkRD+w7Ayuz3/WcpPZP92mHA7TwGTpKkqaivD66+Gs44A/7+dzj88Pj7d7876cok\nSSoqEz2n/aO5LkSSJJWAKIJbboFTToFHH4XPfha+/nWoqkq6MkmSitKEz2mXJEka5K674CMfgQMP\nhHe9C+69F667zsAuSdIkGNolSdLkPPII7L9/fM76v/4F7e3Q0QG77ZZ0ZZIkFT1DuyRJmphVq+Dz\nn4eddoLf/x6uuQZWrICPf9zz1iVJyhHPVJckSePz7LPxNPjLLounwC9eDF/6EmywQdKVSZJUcgzt\nkiRpbF58ES65BL71LVizJj53/bjjYOONk65MkqSSZWiXJEkje+01uPJKOPtseOYZOOIIOO00eOc7\nk65MkqSS5552SZI0tCiC66+H7beHI4+EffeFxx6L2+EN7JIkFYShXZIkvdntt8OHPgQHHwzTp8PK\nldDUBNtsk3RlkiRNKYZ2SZL0hgcegLq6eFU9hDi8t7bCzjsnXZkkSVOSoV2SJMETT8D8+bDLLvDH\nP8KNN8Ly5bDPPklXJknSlGZolyRpKvu//4OFC+EDH4hX1f/7v+Mz1z/1Kc9alyQpBZweL0nSVPTC\nC3DhhXDBBVBWBuecE4f3t70t6cokSdIAhnZJkqaSV1+NV9PPOQeefx6OOQZOOgk23zzpyiRJ0hBs\nj5ckaSpYswaam2HbbWHRIvjEJyCTgfPPN7BLkpRihnZJkkpZFEF7O+y6K8ybBzvsAA89BFdeCVtv\nnXR1kiRpFIZ2SZJK1X33QU1NfITb294Gd90FP/85bL990pVJkqQxMrRLklRqMhk4+GDYfXd46im4\n5Ra4807Yc8+kK5MkSeOUqtAeQtgrhHBLCOGvIYQ1IYT9h7jNOSGEv4UQ/hVC+FUIoSKJWiVJSp2/\n/x2OPBK22y4+Y/3HP4YHH4RPfrIgx7dlMhlaW1vp7OzM+++SJGmqSFVoBzYCHgC+AkTrXhlCOBE4\nGvgSsDvwItAeQtigkEVKkpQqq1fDqadCRQVcey1861vxavvnPx8f55ZnPT091NXNpbq6mvr6eqqq\nqqirm0tvb2/ef7ckSaUuVaE9iqK2KIrOiKLo58BQSwKLgHOjKPplFEWPAIcA7wEOLGSdkiSlwssv\nx2etb7MNXHRRPBX+iSfgv/4LNtywYGXMm9dIR8dyoAlYBTTR0bGchoYFBatBkqRSlarQPpIQwvuB\ndwG/7r8siqLngXuAPZKqS5Kkguvrg5/8BKqr4Wtfg898Brq64BvfgM02K2gpmUyG9vYW+voWA/OB\nrYD59PVdQnt7i63ykiRNUtGEduLAHgFPrXP5U9nrJEkqbVEEv/wl7Lxz3Pq+227w+9/DD34A73lP\nIiV1d3dnv5u9zjV7A9DV1VXQeiRJKjXFFNolSZq67r4bZs+Oh8ptsQXccw/ccEO82p6g6dOnZ79b\nts41SwGoqHBerCRJk7Fe0gWMwz+I97lvyeDV9i2B+0e787HHHsumm2466LKGhgYaGhpyWaMkSbn1\n6KNwyinx+eof/CC0tkJtbUGmwY9FVVUVtbX1dHQspK8vIl5hX0pZ2SJqauqprKxMukRJkvKqubmZ\n5ubmQZetXr06Z48fouhNQ9pTIYSwBjgwiqJbBlz2N+D8KIouyv68CXGAPySKouuHeZwZwIoVK1Yw\nYw7y2VwAACAASURBVMaMAlQuSVIO/OUvcOaZcNVV8L73wbnnQkMDTEtfk1xvby8NDQtob29Ze1lt\nbT3NzU2Ul5cnWJkkSclYuXIlM2fOBJgZRdHKyTxWqlbaQwgbARW8MTl+mxDCB4GeKIqeBC4GTgsh\ndAF/As4F/gL8PIFyJUnKvZ4eOO88WLwYNt4YLr4Yvvxl2CC9p5uWl5fT1raEzs5Ourq6qKiocIVd\nkqQcSVVoB3YFbiceOBcB38le/hPgsCiKvh1CeBvwA2Az4E5gThRFryZRrCRJOfPSS3FQP+88eO01\nOOmk+Oi2jTdOurIxq6ysNKxLkpRjqQrtURQtZZTheFEUnQWcVYh6JEnKu9dfj1vgzzoLnnoKjjgC\nTjsNttwy6cokSVIKpG9jnCRJU0EUwU03wY47wuGHx5PhH3sMLr3UwC5JktYytEuSVGhLl8KHPwyf\n+hRsvTWsWAHXXANrj0+TJEmKGdolSSqUhx6CuXNhn33itviODmhvB083kSRJwzC0S5KUb3/6Exxy\nCOy8M2QycN11cO+98LGPJV2ZJElKOUO7JEn58vTT8NWvQnU13HorXH45PPoofPazEMLo95ckSVNe\nqqbHS5JUEv75T7joIjj//PjnM86Iw/tGGyVblyRJKjqGdklvkslk6O7upqKiwjOXpfF47TW44go4\n5xzo7YWjjoJTToEttki6MkmSVKRsj5e0Vk9PD3V1c6murqa+vp6qqirq6ubS29ubdGlSuq1ZA9de\nC9ttB0cfDbW18d71Cy80sEuSpEkxtEtaa968Rjo6lgNNwCqgiY6O5TQ0LEi4MinFOjpgt93gP/4j\n3rv+wAPwk5/A+96XdGUlIZPJ0NraSmdnZ9KlSJKUCEO7JCD+i3F7ewt9fYuB+cBWwHz6+i6hvb3F\nvzBL61q5Ej7+cdhvP3jLW2DZMvjlL2GnnZKurCTY+SNJUszQLgmA7u7u7Hez17lmbwC6uroKWo+U\nWl1d8ar6zJnwl7/ATTfBb34De+2VdGUlxc4fSZJihnZJAEyfPj373bJ1rlkKQEVFRUHrkVLnH/+I\nB8ttuy3cdRf88Ifw0ENw4IEe35Zjdv5IkvQGQ7skAKqqqqitraesbCHxytaTQBNlZYuora13irym\nruefj49sq6iAa66Bb3wDOjvhP/8T1vMQlnyw80eSpDcY2iWt1dzcRE3NLKAR2BpopKZmFs3NTQlX\nJiXglVfgkktg+vT4vPWjj4YnnoATToC3vjXp6kqanT+SJL3BJQJJa5WXl9PWtoTOzk66uro8p11T\nU19fvKJ+xhmwahUcdhiceSa8971JVzZl9Hf+dHQspK8vIl5hX0pZ2SJqauz8kSRNLYZ2SW9SWVnp\nX4o19UQRtLbCySfHe9UPOghaWuI97Cq45uYmGhoW0N7euPaympp6O38kSVOOoV2SpOXL4aSTYOlS\nmD0b7r4b9tgj6aqmNDt/JEmKGdolSVPXY4/BKafEx7btuCMsWQJz5jgNPkXs/JEkTXUOopMkTT1/\n/Sscfjhsvz2sWAFXXw333w/19QZ2SZKUKq60S5Kmjt5eOO88WLwYNtoILrgAjjwSNtww6cokSZKG\nZGiXJJW+l16Cyy6Lz1h/9VU4/vj4a9NNk65MkiRpRIZ2SVLpev11+MlP4iPbnnoqbok//XR497uT\nrkySJGlM3NMuSSo9UQQ33ww77QRf/CLsuSc8+ihcfrmBXZIkFRVDuySptNx5ZxzSDzoI3vMeuO8+\nuPZacAK5JEkqQoZ2SVJpePhh+OQn43PWX3kFbr0VOjpg112TrkySJGnCDO2SpOL25z/DoYfCBz8Y\nt8A3N8er6/vtl3RlkiRJk+YgOklScXrmmXga/He/C5ttBpdeGg+a22CDpCvLuUwmQ3d3NxUVFVTa\n5i9J0pRiaJckFZcXX4SLL4ZvfxvWrIFTT4XjjoO3vz3pynKup6eHefMaaW9vWXtZbW09zc1NlJeX\nJ1iZJEkqFNvjJUnF4bXX4Pvfh4oKOPts+PznobsbzjijJAM7wLx5jXR0LAeagFVAEx0dy2loWJBw\nZZIkqVAM7ZKkdIsiuP562H57+MpX4GMfg8cfh0sugXe+M+nq8iaTydDe3kJf32JgPrAVMJ++vkto\nb2+hs7Mz4QolSVIhGNolSel1222w++5w8MHxCvv990NTE7z//UPePJPJ0NraWhKBtru7O/vd7HWu\n2RuArq6ugtYjSZKSYWiXJKXP/fdDbW28qj5tGtx+O7S0xBPih9DT00Nd3Vyqq6upr6+nqqqKurq5\n9Pb2Frjw3Jk+fXr2u2XrXLMUgIqKioLWI0mSkmFolySlR3c3zJsHM2bER7ndeCMsXw777DPi3Upx\n73dVVRW1tfWUlS0k/nM9CTRRVraI2tp6p8hLkjRFGNolScl76ik45hj4wAdg6VL47/+GRx6BT30K\nQhjxrqW897u5uYmamllAI7A10EhNzSyam5sSrkySJBWKR75JkpLzwgvwne+w5vzz6QuB1V/9Kluc\nfTa87W1jfoix7P0u1lXp8vJy2tqW0NnZSVdXl+e0S5I0BbnSLkkqvFdegcWLWbPNNrx67rlc8K9/\nseWLL/L/LriAuk99dlx70afC3u/KykrmzJljYJckaQoytEuSCmfNGrjmGth2Wzj2WH71lg2pYmNO\npIneCe5Fd++3JEkqZYZ2SVL+RRG0tcHMmTB/Puy0E3/6xS+o++tf+POa7zLZveju/ZYkSaXK0C5J\nyq97742PbpszB97+dvjNb+Dmm/nD2gFzkz+HvH/vdyaToaWlhUwmQ1vbEsrLy3PzZ5AkSUqIg+gk\nSfmRycCpp8INN8D228Mtt8AnPrF2GvzgvejzB9xx4nvRKysrbYeXJEklxZV2SZOWyWRobW0t6qO1\nilUqn/u//x2OOAK22y5eZb/qKnjwQfjkJwcd3+ZedEmSpNEZ2iVNWE9PD3V1c6murqa+vp6qqirq\n6uaOa/K3JiaVz/3q1fHK+vTpcP318O1vw+OPw6GHQlnZkHdxL7okSdLIDO2SJmzevEY6OpYTr5JO\nbPK3JiZVz/3LL8N3vgPbbAMXXQTHHgtPPAHHHQcbbjjiXd2LLkmSNDL3tEuakEwmQ3t7C3Fo7N+P\nPJ++voj29kY6Ozttb86T1Dz3fX3wP/8DZ5wBf/sbfPGL8ffvec+4H6oY96JnMhm6u7upqKgoutol\nSVLxcKVd0oR0d3dnv5v85G+NT+LPfRTBL34BH/wgfOELMGsWPPoofP/7EwrsxSaVWxMkSVLJMrRL\nmpDBk78Hmvjkb41Nos/93XfD7Nmw//7wznfCPffAdddBVVX+fmfKpGprgiRJKnmGdkkT4uTv5CTy\n3D/6KBx4IOy5J7zwArS2wq9/DbvvnvvflWL9WxP6+hYTb03YinhrwiW0t7eka4q/JEkqCYZ2SRPm\n5O/kFOy5f/JJOOww2HFHeOgh+OlPYeVKqKsbdHzbVJH41gRJkjTlOIhO0oRFUZR0CYlKchBZ/9T1\nzs5Ourq6cl9DTw+cdx4sXgybbAIXXwxf/jJssEHqB7Dls77BWxPmD7jGbSGSJCk/XGmXNGFTdW/v\nRAaRZTIZWltbc94+XVlZyZw5c3IXTv/1rzisb7MNXH45nHQSdHfDMcfQ889/pnoAWyEGxLktRJIk\nFZqhXdKETOW9veP5sKJoJo2//jpccQVUVsbHth1ySHzW+llnwcYbA+n8kGbghyGFqs9tIZIkqZBs\nj5c0IWPZ25uLVce0tWKP94z0wUFyNrCMjo6FNDQsoK1tScHrf5MogptuglNOgccfh3nz4Nxz45X2\nAVJzNnxWT08P8+Y1ZmsaKP/15X1rgiRJ0gCutEuakHwfO5bWFerxDCLLRTdCvtrqAbjjDthjD/j0\np+Hf/z0eMPfTn74psEP6BrC9eVX9hOw1hasv51sTJEmShmBolzQh+d7bm8ZWbBjfhxWTCbp5/dDi\nwQehvh4++lFYsyY+uq2tDXbZZdi7JHo2/DqG/jDki6mpT5IkKZcM7ZImLF97e9O8X348H1ZMJujm\n5UOLP/4RGhvjcN7dDddfD/fcA/vuO+pd0zSAbegPQ6qAfYGjEq9PkiQplwztkiasf29vJpOhpaWF\nTCZDW9sSysvLJ/W4aWvFXtdYP6yYaNDN+YcWTz8NX/0qVFdDRwd873vwyCPwmc+M66z1tAxgG/7D\nkIOBF0i6PkmSpFxyEJ2kSausrMzpSmbaz8IezyCy5uYmGhoW0N7euPaympr6EYNkzob8/fOfcNFF\ncP75cTg/6yxYtAg22mj0+w4hLQPY+j8M6ehYSF9fRPy8LKWs7BRqauq49NKLHRAnSZJKhqFdUuoM\nH8oWUVOTnlbnsXxYMZGgO+kPLV59NT6+7dxzobcXjj46ng6/+eYj32+Mcv0hzUSM9GFIeXl54vVJ\nkiTliqFdUipNZIU6zcYTdCf8ocWaNXDddXDaafEZ64ccAmefDe97X87+HGmRllV/SZKkfDO0S0ql\nqR7Kxv2hRUcHnHhifGzbJz4Rn72+444FqjY5aVj1lyRJyidDu6RUm6qhbMwfWqxYASedFIf2PfaA\nZctgr70KX7AkSZLywtAuSSk27IcWXV1xG/y118K228LNN8P++49rGrwkSZLSzyPfJBWVTCZDa2tr\nome1J+of/4CjjoqD+m9+Az/6ETz0EBxwgIFdkiSpBBnaJRWFnp4e6urmUl1dTX19PVVVVdTVzaW3\ntzfp0grj+efh9NNh+nS45hr4xjcgk4HDDoP1bJqSJEkqVYZ2SUVh3rxGOjqWA03AKqCJjo7lNDQs\nSLiyPHvlFbj4YthmG7jgAjjmmHgy/AknwFvfmnR1kiRJyjOXZySlXiaTob29hTiw959bPp++voj2\n9kY6OztLb1hdXx/89Kdwxhnw5JPxivqZZ8J735t0ZZIkSSogV9olpV53d3f2u9nrXLM3AF1dXQWt\nJ6+iCJYsgZ13hkMPhRkz4JFH4Ior4L3vdU+/JEnSFGNol0pEKYe56dOnZ79bts41SwGoqKgoaD15\n89vfwt57x+esv+MdcPfd8LOfwbbbuqdfkiRpijK0S0VuKoS5qqoqamvrKStbSNwi/yTQRFnZImpr\n64u/Nf4Pf4CDDoIPfxieey5eab/jjvjc9awpu6dfkiRpijO0S0VuqoS55uYmampmAY3A1kAjNTWz\naG5uSriySfjLX+CLX4QddoD774err47/WV8/6Pi2/j39fX2Liff0b0W8p/8S2ttbSrK7QpIkSTEH\n0UlFbCoNaCsvL6etbQmdnZ10dXVRUVFRvH+23l447zxYvBg22gi+8x048kh4y1uGvPlY9vQX7XMh\nSZKkERnapSJWamEuk8nQ3d09YiCvrKwsqj/TIC+9BJdeCt/8Jrz6anxs2/HHwyabjHi3wXv65w+4\npsT29EuSJOlNbI+XilipDGhLYl9+QQf3vf46/OhHUFkJp54K8+ZBdzecc86ogR2Kd09/KQ9HlCRJ\nKhRDu1TEijXMrWu0ffm5DH8F/YAgiuDmm2HHHeO96x/5SDx07rvfhXe9a1wPVUx7+qfCcMQk+CGI\nJElTk6FdKnLFFOaGMtqQtdmz98lp+CvY4L5ly2DPPeOp8O99L/zud/C//wsT7H7o39OfyWRoaWkh\nk8nQ1raE8vLy3NadA1NlOGKh+CGIJElTW4iiKOka8iqEMANYsWLFCmbMmJF0OVLeFOuAttbWVurr\n64nD3VYDrnkS+HemTduUNWsuJd63v4yysoXU1MyirW3JuH9XJpOhurqawYP7yP7cSCaTmfxz9/DD\ncPLJ8bFtM2bEA+f2229yj1lECvIcTzF1dXPp6Fie/WBr8v8dSJKk/Fu5ciUzZ84EmBlF0crJPJYr\n7VKJqKysZM6cOUUXiIbfl/+/wJpsYM/NMWdjGdw3YX/+Mxx6KHzwg/DYY/Gq+n33pTqw56PdOq/P\n8RTkcX+SJMnQLpWYYtv3usUWW7DZZlsARzFwXz6ck71F7sJfXgb3PfMMHHccVFVBW1s8Hf7RR+Fz\nn4Np6XyLzWe7dakMR0wLPwSRJEnp/BvlCEIIZ4YQ1qzz9WjSdUlJK9Z9r/PmNbJ69WvA+xm4Lx/6\nzyzPXfjL6eC+F1+Er38dpk+HH/4QTjstngh/1FGwwQbjrq2Q8rnnvFSGI6aFH4JIkqSiC+1ZjwBb\nAu/Kfn0k2XKk5BXj8K/+1t8o+i5wP5ABWoDzgWeBbVl3BX6y4W/Sg/teew2+9714oNy558Jhh0F3\nN5nPfY7WO+9MfYdDIdqti304Ypr4IYgkSVov6QIm6PUoip5OuggpLfqD2ODhX/Pp64tob2+ks7Mz\nlX+5f3Prb2X2awfgBEJYxTve8XaefbZx7X1qauonFf76p7CPe3DfmjVwww3xOevd3bBgAZxzDj2b\nbMK8eY3Z5z9WWxvXmMbJ7mNpt57sa2XCz7GG1NzcREPDAtrbc/ffgSRJKh7FGtorQwh/BV4Gfguc\nHEXRkwnXJCWmEEEsHwa3/g6cNB63/u65567ccstNPPPMMzkPf5WVlUM+ViaTobu7e/Dv+vWv4cQT\nYcUKqK+HG2+EnXYCYF52snf8gUk82bujYyENDQtSOdl7tOc8l+3Wwz3HGh8/BJEkaWorxtC+HPg8\n8DjwbuAsYFkIYYcoil5MsC4pMYUMYrnU3/rb0bGQvr6I+EOGpUybtpA999ybZcvuAOLQku+Q0tPT\n86YV86P22JOL3rI+699xB8yaBUuXwuw3Phgpxg6H4Z7zsrJF1NTYbp1mfggiSdLUVHShPYqi9gE/\nPhJCuBf4M3Aw8OPh7nfsscey6aabDrqsoaGBhoaGvNQpFVIxB7GhWn/326/wrb8DZwJsw9Z8na/R\n8NvfsGqjjdj6Zz+DAw+EEAbdp1g7HGy3liRJyp3m5maam5sHXbZ69eqcPX6IoihnD5aUbHD/VRRF\npw5x3QxgxYoVK5gxY0bhi5MKpLe3NxvEimNv9bqSbP3NZDJUV1fzTr7L6TzKl/kBT7ElZ1HHVfyI\nP2Qyw7bSV1dXM3ilnezPjWSGuV9a2G4tSZKUHytXrmTmzJkAM6MoWjmZxyq6lfZ1hRDeDlQAVydd\ni5SkYt/3mmTr758ffpizgP/iBF5jA07l/+NSjuFlngF+NOyKeTF3OIDt1pIkScWg6EJ7COF84BfE\nLfH/BpwNvAY0j3Q/aarIRxAbcjhbKXjlFfjBD/joWWfxEWAx+3IeV/Mc/Z0Jo88EsNVckiRJ+VR0\noR14L3ANsDnwNHAXMCuKomcTrUoqQUMNZyumlvthrVkDzc1w2mmwahXrfeELfL7rCf73rrvp61vC\neFbMJ9rhULIfhEiSJCmnii60R1Hk5DipQAYOZyuG48xGFUXQ3g4nnQQPPhgPl1uyBLbbjkt7e3lm\nEivmY+1wKNkPQiRJkpQX05IuQFI69R9n1te3mHjI2lbEx5ldQnt7C52dnQlXOE733gv77gtz5sAm\nm8BvfgM33QTbbQe8sWKeyWRoaWkhk8nQ1rYk50F68Achq4AmOjqW09CwIKe/R5IkSaWh6FbaJRVG\nsR5n9iaPPw6nngo33gg77AC//CXU17/p+LZ++RzOVoznukuSJClZrrRLGtL06dOz3y1b55rRh7Ol\nwt/+Bl/+Mmy/Pdx3H1x1FTzwAMydO2xgH6tMJkNra+u4uw3G8kGIJEmSNJChXdJaA8No/3FmZWUL\niVeGnwSaKCtbRG1tio8ze+45OOUUqKiAG26A88+PV9sPPRTKyib10Pfeey8zZ+5GdXU19fX1VFVV\nUVc3l97eXmD0MF/0H4RIkiSp4GyPlzTscLTvfe8yjjzy6OI4zuzll+Gyy+Ab34i/P+44OOEE2HTT\nST/0UM8P7At8jo6Ok/n0pw9mgw02GHW4XCHOdXcqvSRJUmlxpV3SsMPRjjzy6IIMZ5uUvj748Y+h\nqiqeCv+5z0F3N3z96zkJ7DD08wMPAD+nr+8Sbr/9tjEPl2tubqKmZhbQCGwNNFJTM2vSH4T09PRQ\nVzd32C4ASZIkFacQRVHSNeRVCGEGsGLFihXMmDEj6XKk1MlkMlRXVzN4OBrZnxvJZDLpXLGNIvjF\nL+JW+N//Hj772TioV1Xl9NeM9vzE/1ww7PXDPX/Dnes+0ZXyurq5dHQsz077j4/nKytbSE3NrOI8\nnk+SJKmIrVy5kpkzZwLMjKJo5WQey5V2aYoryuFod90Fe+0FBxwAW24ZH+d23XU5D+ww+vMDPxvx\n+uGev8rKSubMmbM2mE9mpbzkjueTJEnSWoZ2aYorquFov/99HNT32gtefBHa26GjA3bbLW+/ctq0\n/rfJ69a5Jn5+Qrg1+/Pknr/JnN9elB+8SJIkaUwM7dIUVxRT4letgi98AXbaCR55BK65BlasgI9/\nfNLHtw2nf+W7rq4ue8nxwC7Aw8TP09HAND7+8dnsu+9+k3r+JrtSnvQHLxM9Ak+SJEmjM7RLyttw\ntEl79lk4/vi47b2lBS65BP7wB2hogGmjv31NJkwOPXzuj8DOQCMzZlRxww3XsWjR0XzrW9+Y1PM3\n2ZXypD54cfidJElS/nnkm1RCJjrErLy8nLa2JcMORyu4f/0rDujf+lY8Hf6UU+DYY2Hjjcd09+GO\nsFv3CLbh9K98Dx4uNx+IgEZuuOEGrrjiSj7zmc8Mevz77ruPp59+etzP3+CV8oHD7Ma+Ut7c3ERD\nw4KCHs83+IONePhdR8dCGhoWOPxOkiQpR5weL5WAyYbU1Hj9dbjySjjrLHjmGTjySDj1VHjnO8f1\nMJOdpN7a2kp9fT3xCvtWA655EtiaGTN248EHu3M6qf2Nmi9h8Pnt43vMQn3wUrSnDkiSJBWA0+Ml\nDTKZIWapEEVw442www7w5S/DvvvCY4/Fq+3jDOy5mKQ+2h7xlSvvy/mk9lxtUVh3Kn2+OPxOkiSp\nMAztUpEr+uO+7rgDZs2Cz3wG3v9+uP9+aGoi8/rrE9qPnoswOdIe8Rkzdp304w+lf4tCJpOhpaWF\nTCZDW9uS1HZKJD38TpIkaaowtEtFrmhXPB98EObMgY9+NF5pv+02aG2lZ+utJzXcLFdhcriV7+9/\n//KcPP5wCrVSPllFceqAJElSCTC0S0Wu6FY8//hHWLAAdtkFnngCrr8e7rknDu9MvtU/V2FyuJXv\n3XbbzbCaldpTByRJkkqIg+ikEjDRIWYTnTY/IU8/DV//Onzve7DFFvGwuS98AdZff1A9uRhu1tvb\nm52knp/BfPl+/GKTmlMHJEmSUiKXg+g88k0qAeM97qug0+b/+U+48EK44AIIIQ7rixbBRhu96aZj\nafUfSyjM9xF2qTsiL2GVlZVT+s8vSZKUT4Z2qQSMN0SO53ztCa/Gv/oqXHEFnHMOPPccHH10fN76\n5psPe5dcnFc+UL7DpGFVkiRJ+WZol0rIWEJk/7T5wS3o8+nri2hvb6Szs5PKysqJr8avWQPXXgun\nnRbvXz/0UDj7bNh661Hr79+P3tGxkL6+iMGt/oXZL17QLQOSJEnSKBxEJ00xY502P9xAuJqa2qGP\nYYsiuPVW2HVXmDcPtt8eHnoIfvzjMQX2fkkNN+vp6ZnU1HpJkiQpHwzt0hQzlmnzI539vnLlfW8O\ntL/7Hey3H9TWwlvfCnfeCbfcAjvsMO76kjqvfLJT6yVJkqR8sD1emmLG0oLe2tqavfXQq/HwaX71\nqw7+a/+DuPI9W8J118F228HNN8P++8cD50Ywlhb0Qu4XH+uWAUmSJKnQXGmXpqDRWtBHW41/Fzdy\n2ZrV/OCupbx6xx1w5ZVxK/wBB4wY2NPagj7WLQOSJElSoRnapSlopBb0np4eFi48lvjt4Sji1ecn\ngSY24SjOZUu6eCufYyNOZkP2ec9W8XnrZWWj/t60tqCPZcuAJEmSlATb46UpbKgW9DeC9feAa4FG\nNgC+ApxKGW/jNS5hEd/iRFbzS3hgbO3jaW5BT8PUekmSJGkorrRLWmvwALovMY1bOYTzyLAx5wM3\nUk8FXZzCN1nNZoynfTztLehJTa2XJEmSRuJKu6S13gjWezGXX/JNTmZHHuFG5lBLK4/zAeA9A+4x\n9vbxwS3o8wdck44W9P4tA52dnXR1dXlOuyRJklLB0C6VkLFMZR/J9OnT2QP4FvuxFxnuYG8+xHLu\npRNoZdq0/2bNmp2YSPt4sbSgF3JqvSRJkjQa2+OlEpCTqeyPPkrV177G3cAmdDOH4/koV3MvnZSV\nLWLfffdjv/32ZDLt47agS5IkSePjSrtUAgZPZZ8NLKOjYyENDQtoa1sy8p3/8hc480y46irYemte\n/P73OelnP6ft1guACwCoqamnubmJ8vLySbWP24IuSZIkjU+IoijpGvIqhDADWLFixQpmzJiRdDlS\nzmUyGaqrqxk8lZ3sz41kMpmhg3FPD5x3Hlx6Kbz97XD66fDlL8Nb3gJgsJYkSZImaOXKlcycORNg\nZhRFKyfzWK60S0VuLFPZB4Xul16CxYvjwP7aa3DCCXD88bDJJoPu7d5uSZIkKXnuaZeK3OCp7AOt\nM5X99dfhhz+Eyko47TSYPx+6u+Gcc94U2CVJkiSlg6FdKnL9U9nLyhYSt8Q/CTRRVraI2tp6Kisq\n4KabYMcd4fDDYa+94A9/gMsugy23TLj6uL2/tbWVzs7OpEuRJEmSUsfQLpWA4aayX3/0kbDHHvCp\nT8FWW8HvfgfNzZCDM9EnG7ZzMvFekiRJKnGGdqkE9E9lz2QytLS08KdbbqGtDDb+5Cfjtvhf/Qpu\nvRXiYRiTkquwPXji/SqgiY6O5TQ0LJh0jZIkSVKpMLRLJaRy/fWZ09zM+w44ADIZuPZauPdeqKnJ\n2e/IRdjOZDK0t7fQ17eYeOL9VsB8+vouob29xVZ5SZIkKcvQLpWK006D6up4Rf2734VHH4WDD4Zp\nufvPPFdheywT7yVJkiQZ2qXSsemm8VnrXV1w5JGw/vo5/xW5CttjnngvSZIkTXGe0y6VihNOIV3S\nDgAAF9dJREFUyPuvGBy25w+4Znxhu3/ifUfHQvr6IuLQv5SyskXU1NR7PrwkSZKU5Uq7VILydYza\nqMfLjSNsDzfxvrm5Kac1S5IkScXMlXaphPT09DBvXiPt7S1rL6utrae5uYny8vKc/I7m5iYaGhbQ\n3t649rKamvpxh+3+ifednZ10dXVRUVHhCrskSZK0DkO7VEIGT3afDSyjo2MhDQ0LaGtbAsSr8N3d\n3RMOybkO25WVlYZ1SZIkaRiGdqlE9E92jwN7/37z+fT1RbS3N3Lfffdx+uln5WwV3rAtSZIk5Z+h\nXSoRo012P+KIo3jwwW5GWoUfzbqr9AN/jqJoUiv4kiRJkt7M0C6ViNEmu69ceR/DrcJ3dnaOGLSH\n2iu/+eZb8uyzTw241TRgDZD7ffSSJEnSVOX0eKlEjDTZfcaMXbO3mtj56oP3yq8Cmnj22ZeBndf+\nDJsC+wJNdHQsp6FhQW7+YJIkSdIUZmiXSshwx6idfPKJ2VssW+ce8Sr8eusN33TTv1e+r28x8Sr9\nVtl/XgY8ALyc/XkxcBuwO319l9De3pLzI+ckSZKkqcbQLpWQ/snumUyGlpYWMpkMbW1L2GijjYj/\ncx+8Cg+LgGm8/vrrwz7maHvloWuIn8e2gi9JkiRpZO5pl0rQupPd4/3ua+hffX/DzkAPFRUVwz7W\naHvloWKIn+PvR3pcSZIkSaNzpV2aAt7Y774KOB/4CXA+ZWWrqK2tH3EI3XB75eFo4tC/YfbnhcR7\n2u+hrGzRqI8rSZIkaXSGdmmKeGO/+wnAocAJ1NTMorm5aRz3fWOv/Oabb0i8p71/9X418Z72xjE/\nriRJkqSR2R4vTRH9+907Ozvp6uoa13nqw9134M/AuB93XeueAy9JkiRNdYZ2aYpZd7/7ZO471M8T\nMdQ58J71LkmSJNkeLylPMpkMra2tYzr2bahz4D3rXZIkSTK0S8qxnp4e6urmUl1dTX19PVVVVdTV\nzaW3t3fI2w93DrxnvUuSJEmGdkk5Nt5V89HOgfesd0mSJE1lhnZJOTORVfPB58AP5FnvkiRJkqFd\nUs5MZNV8uHPgC3HW+3j23UuSJElJMLRLGiSTyXDFFVfwwx/+cNxhdqKr5kOdA5/Ps97Hu+9ekiRJ\nSopHvkkC4iD72c/+B7fd9qsBl05j330/xg03XDumo9f6V807OhbS1xcRr7AvpaxsETU1w6+aT+YM\n+YkYvO9+NrCMjo6FNDQsoK1tSd5+ryRJkjRerrRLAuIge/vt9zFwgBxsym23LRvX0WuTWTWvrKxk\nzpw5eW+Jd1q9JEmSioWhXdLaIBtFlzEwyMJi4JVxhdkoivJXaA44rV6SJEnFxNAuadQgC2MPs+M9\n8q3QnFYvSZKkYmJolzRqkAX461//OupqezG0nic5rV6SJEkaL0O7pLVBNoSjGRhkYSHwFmAahx9+\n+KhT1ifbel6oI9gKPa1ekiRJmihDuyQymQyHHXYoH/rQdgwMsrAaiIDvMZZW94m2nhf6CLb+afWZ\nTIaWlhYymQxtbUvGNCFfkiRJKiSPfJNKVCaTobu7e8Tj03p6ejjggE9x111vtMHvtdfefPrTB/HC\nCy9w+umnA1cSt7pD3Ooe0d7eSGdn55sed6JHviV1BFtlZaXt8JIkSUo1V9qlEjPWVeuenh6qqrbj\nrrseYODQuLvvfpjW1luZOXNm9pbrtrpvBcDSpUsZynhbz4thH7wkSZKUFEO7VGLGOr39gAMO4tln\nnwK+y1BhuaysLHvL/lb3HmAusA8Ahx9++JAfBoy39dwj2CRJkqThGdqlEjLWVetMJsNdd/WH8aHD\ncl9f3zpT1j8L/JaxHuVWWVnJnDlzRm0/9wg2SZIkaXiGdqmEjHXV+o3bwUhheXCr+23ApeS6hd0j\n2CRJkqThGdqlEjLWVes3brcz8bFuA495O5q99tqbysrKta3uV1xxRfb2+WlhH+s++EIdCSdJkiSl\nhaFdKiFDr1qfz7RpR/KRj+y9dtW6/3bTpv2JN453i/+5+eYb8vOf3zTocWfP7g/r+WlhH20ffKGP\nhJMkSZLSwtAulZjBq9b/DnyNNWv+yV13LR0UdJubm9hvvw8DD6y970c+sjetrb9g+fLlg1azC9XC\nPtw++LEO15sK7DaQJEmaWooytIcQjgoh/DGE8FIIYXkIYbeka5LSon/Veq+99mbatE0ZLuiuu7p9\n7733stFGG7H77rsPuZo93qPccsUj4WJ2G0iSJE1NRRfaQwifA74DnAnsAjwItIcQtki0MClFMpkM\nd965lDVrRh8c17+6ffrpZ424mj3eo9xyxSPhYnYbSJIkTU1FF9qBY4EfRFF0dRRFjwFHAP8CDku2\nLCk9xht0x7OaPdaj3HLFI+HsNpAkSZrKiiq0hxDWB2YCv+6/LIqiCOgA9kiqLiltxht007ya7ZFw\n6f73I0mSpPwqqtAObAGUAU+tc/lTwLsKX46UTuMNumlfzU5qP31apP3fjyRJkvJnvaQLkJQfzc1N\nNDQsoL29ce1lNTX1Qwbd/pDf0bGQvr6IeAV3KWVli6ipSX41u38/fWdnJ11dXVRUVCReUyGl/d+P\nJEmS8ifE3eXFIdse/y/g01EU3TLg8quATaMoOmiI+8wAVsyePZtNN9100HUNDQ00NDTkt2gpYWMN\nur29vdmQ37L2straOOTne9icRue/H0mSpHRqbm6mubl50GWrV69m2bJlADOjKFo5mccvqtAOEEJY\nDtwTRdGi7M+BeJTy4iiKzh/i9jOAFStWrGDGjBmFLVYqQlN1NbtY+O9HkiQp/VauXMnMmTMhB6G9\nGNvjLwSuCiGsAO4lnib/NuCqJIuSSkVlZaVhMMX89yNJkjS1FF1oj6LouuyZ7OcAWwIPALVRFD2d\nbGWSJEmSJOVW0YV2gCiKLgcuT7oOSZIkSZLyqdiOfJMkSZIkacowtEuSJEmSlFKGdkmSJEmSUsrQ\nLkmSJElSShXlIDpJY5fJZOju7vZcb0mSJKkIudIulaienh7q6uZSXV1NfX09VVVV1NXNpbe3N+nS\nJEmSJI2RoV0qUfPmNdLRsRxoAlYBTXR0LKehYUHClUmSJEkaK9vjpRKUyWRob28hDuzzs5fOp68v\nor29kc7OTlvlJUmSpCLgSrtUgrq7u7PfzV7nmr0B6OrqKmg9kiRJkibG0C6VoOnTp2e/W7bONUsB\nqKioKGg9kiRJkibG0C6VoKqqKmpr6ykrW0jcIv8k0ERZ2SJqa+ttjZckSZKKhKFdKlHNzU3U1MwC\nGoGtgUZqambR3NyUcGWSJEmSxspBdFKJKi8vp61tCZ2dnXR1dXlOuyRJklSEXGmXSlxlZSVz5swh\niiJaW1vp7OxMuiRJkiRJY2Rol0pcT08PdXVzqa6upr6+nqqqKurq5tLb25t0aZIkSZJGYWiXSty8\neY10dCwnHki3Cmiio2M5DQ0LEq5MkiRJ0mjc0y6VsEwmQ3t7C3Fgn5+9dD59fRHt7Y10dnambp97\nJpOhu7vbPfiSJEkSrrRLJa27uzv73ex1rtkbgK6uroLWMxLb+CVJkqQ3M7RLJWz69OnZ75atc81S\nACoqKgpaz0hs45ckSZLezNAulbCqqipqa+spK1tIHIafBJooK1tEbW19atrP+9v4+/oWE7fxb0Xc\nxn8J7e0tTryXJEnSlGVol0pcc3MTNTWzgEZga6CRmppZNDc3JVzZG4qpjV+SJEkqJAfRSSWuvLyc\ntrYldHZ20tXVlcoBb4Pb+OcPuCZ9bfySJElSIRnapSmisrIydWG9X38bf0fHQvr6IuIV9qWUlS2i\npiY9bfySJElSodkeLykViqGNX5IkSSo0V9olpUIxtPFLkiRJhWZol5QqaW7jlyRJkgrN9nhJkiRJ\nklLK0C5JkiRJUkoZ2iVJkiRJSilDuyRJkiRJKWVolyRJkiQppQztkiRJkiSllKFdkiRJkqSUMrRL\nkiRJkpRShnZJkiRJklLK0C5JkiRJUkoZ2iVJkiRJSilDuyRJkiRJKbVe0gVIyo1MJkN3dzcVFRVU\nVlYmXY4kSZKkHHClXSpyPT091NXNpbq6mvr6eqqqqqirm0tvb2/SpUmSJEmaJEO7VOTmzWuko2M5\n0ASsApro6FhOQ8OChCuTJEmSNFm2x0tFLJPJ0N7eQhzY52cvnU9fX0R7eyOdnZ22ykuSJElFzJV2\nqYh1d3dnv5u9zjV7A9DV1VXQeiRJkiTllqFdKmLTp0/PfrdsnWuWAlBRUVHQeiRJkiTllqFdKmJV\nVVXU1tZTVraQuEX+SaCJsrJF1NbW2xovSZIkFTlDu1TkmpubqKmZBTQCWwON1NTMorm5KeHKJEmS\nJE2Wg+ikIldeXk5b2xI6Ozvp6urynHZJkiSphBjapRJRWVlpWJckSZJKjO3xkiRJkiSllKFdkiRJ\nkqSUMrRLkiRJkpRShnZJkiRJklLK0C5JkiRJUkoZ2iVJkiRJSilDuyRJkiRJKWVolyRJkiQppQzt\nkiRJkiSllKFdkiRJkqSUMrRLkiRJkpRShnZJkiRJklLK0C5JkiRJUkoZ2iVJkiRJSilDuyRJkiRJ\nKWVolyRJkiQppQztkiRJkiSllKFdkiRJkqSUMrRLkiRJkpRShnZJkiRJklLK0C5JkiRJUkoZ2iVJ\nkiRJSilDuyRJkiRJKWVolyRJkiQppQztkiRJkiSllKFdkiRJkqSUMrRLkiRJkpRShnZJkiRJklLK\n0C5JkiRJUkoZ2iVJkiRJSqmiCu0hhD+FENYM+OoLIXwt6bqkNGhubk66BCnvfJ1rKvB1rqnA17k0\ndkUV2oEIOA3YEngX8G7g0kQrklLC//lpKvB1rqnA17mmAl/n0titl3QBE/DPKIqeTroISZIkSZLy\nrdhW2gFOCiE8E0JYGUI4PoRQlnRBkiRJkiTlQ7GttF8CrAR6gA8D5xG3yR+fZFGSJEmSJOVD4qE9\nhPBN4MQRbhIB20ZRlImi6OIBlz8SQngV+EEI4eQoil4b5v4bAvzhD3/ITcFSSq1evZqVK1cmXYaU\nV77ONRX4OtdU4OtcpW5A/txwso8Voiia7GNMroAQNgc2H+VmT0RR9PoQ990OeBj4QBRFncM8/jzg\np5MuVJIkSZKk8ZkfRdE1k3mAxFfaoyh6Fnh2gnffBVgD/N8It2kH5gN/Al6e4O+RJEmSJGmsNgT+\nnTiPTkriK+1jFUKYBXwIuB14gXhP+4XAkiiKDkuyNkmSJEmS8qGYQvsuwOVANfAW4I/A1cBFI+xn\nlyRJkiSpaBVNaJckSZIkaaopxnPaJUmSJEmaEgztkiRJkiSlVEmH9hDCUSGEP4YQXgohLA8h7JZ0\nTVIuhRDODCGsWefr0aTrkiYjhLBXCOGWEMJfs6/p/Ye4zTkhhL+FEP4VQvhVCKEiiVqliRrtdR5C\n+PEQ7+8tSdUrjVcI4eQQwr0hhOdDCE+FEG4KIVQNcTvfz1W0xvI6z8X7ecmG9hDC54DvAGcSHw33\nINAeQtgi0cKk3HsE2BJ4V/brI8mWI03aRsADwFeANw1eCSGcCBwNfAnYHXiR+P19g0IWKU3SiK/z\nrFYGv783FKY0KSf2Ai4lPv2pBlgfuDWE8Nb+G/h+rhIw6us8a1Lv5yU7iC6EsBy4J4qiRdmfA/Ak\nsDiKom8nWpyUIyGEM4EDoiiakXQtUj6EENYAB0ZRdMuAy/4GnB9F0UXZnzcBngIOjaLoumQqlSZu\nmNf5j4FNoyj6VHKVSbmTXTj7P2B2FEV3ZS/z/VwlZZjX+aTfz0typT2EsD4wE/h1/2VR/OlEB7BH\nUnVJeVKZba/sDiE0hRC2SrogKV9CCO8n/oR64Pv788A9+P6u0rNPtt3ysRDC5SGEdyRdkDQJmxF3\nlfSA7+cqWYNe5wNM6v28JEM7sAVQRvxJ3UBPEb85SKViOfB5oBY4Ang/sCyEsFGSRUl59C7i/xn6\n/q5S1wocAuwLfA3YG2jJdg5KRSX7ur0YuCuKov7ZO76fq6QM8zqHHLyfr5fLQiUVVhRF7QN+fCSE\ncC/wZ+Bg4MfJVCVJmqx1WoN/H0J4GOgG9gFuT6QoaeIuB7YD9ky6ECmPhnyd5+L9vFRX2p8B+og3\n+w+0JfCPwpcjFUYURauBDODkVZWqfwAB3981xURR9Efiv9/4/q6iEkK4DKgH9omi6O8DrvL9XCVj\nhNf5m0zk/bwkQ3sURa8BK4CP9V+WbT/4GHB3UnVJ+RZCeDvxG8CIbxZSscr+j+4fDH5/34R4aqvv\n7ypZIYT3Apvj+7uKSDbIHAB8NIqiVQOv8/1cpWKk1/kwtx/3+3kpt8dfCFwVQlgB3AscC7wNuCrJ\noqRcCiGcD/yCuCX+34CzgdeA5iTrkiYjO5OhgngFBmCbEMIHgZ4oip4k3i92WgihC/gTcC7wF+Dn\nCZQrTchIr/Ps15nAjcShpgL4FnEnVfubH01KnxDC5cTHWu0PvBhC6F9RXx1F0cvZ730/V1Eb7XWe\nfa+f9Pt5yR75BhBC+ArxZv8tic9CPSaKot8lW5WUOyGEZuLzITcHngbuAk7NfnotFaUQwt7Ee7zW\n/R/UT6IoOix7m7OIz/XdDLgTOCqKoq5C1ilNxkivc+Kz228GdiZ+jf+N+C93Z0RR9HQh65QmKnuU\n4VBB4wtRFF094HZn4fu5itRor/MQwobk4P28pEO7JEmSJEnFrCT3tEuSJEmSVAoM7ZIkSZIkpZSh\nXZIkSZKklDK0S5IkSZKUUoZ2SZIkSZJSytAuSZIkSVJKGdolSZIkSUopQ7skSZIkSSllaJckSW8S\nQrg9hHBhWh5HkqSpar2kC5AkScUvhLA3cDuwWRRFzw+46iDgtWSqkiSp+BnaJUlSLgQgyv5zrSiK\nnkumHEmSSoPt8ZIkpUi2nfzS7NdzIYSnQwjnDLh+sxDC1SGEnhDCiyGElhBCxYDrDw0h9IYQDggh\nZEIIL4UQ2kII7x1wmx+HEH62zu+9KIRw+wh1LQgh3BdCeD6E8PcQwk9DCP8ve937gNuyN+0NIfSF\nEK4c8Oe5cMDjjLX+j4cQHg0hvBBCaA0hbDnxZ1WS/v/27u9l7zmO4/jz1W7KzYFGysktZTbSyG4/\nRv4ChuIAw5QDBzRstSKinFAras4oPxJHDtxKciDSsGU5sjVzsFmhpqWVHWi8HXy+9923i/t2XcuP\n723Px8l1fa/P+/u93qevPj++0vJlaJckaXjupS0pvwrYDGxJcn839hpwJXATcC1tZvu9JCt6908D\njwN3A9cBZwNvjfG/tcTYFPAEsBa4BbgAeKUbOwzc1n1fBZwPPLzIc8btfyuwEbgBmAG2j9G/JEn/\nOy6PlyRpeA5X1Zbu+4Eka4FHk3wMbADWV9UugCQbaaH5VuDt7p4p4MGq+qKr2QTsSzI7/9ukqurV\n3uXBJI8Au5JMV9XxJEe7sSMje9oXJFk1Qf8PVNXBruZF4MmT6VuSpOXOmXZJkobn85Hrz2gz2JfS\nZuB3zw9U1VFgP3BJr/5EP5xX1X7gp5GaiSRZl2QuyaEkx4CPuqGZCR6zhvH6Pz4f2DvfA+edTN+S\nJC13hnZJkk49vzFyYBxw2mLFSaaB92nB/y5glnYqPMDp/0B/o6fN/+GAO0mSThWGdkmShueakev1\nwAFgLy1cL4wnOQdYDXzVq59KMturWU3b1763++kIbd953xVL9LMGWAk8VlU7q+prYPRguF+6zxUs\nbh9t6ftf9S9JkjqGdkmShmcmyfYkFye5E3gIeKGqvgHeAV5Kcn2Sy4E3aHvC53r3nwB2JLk6yTra\ngXGfVtWebvxDYDbJPUkuSvI0cNkS/XxLC+Wbk1yY5GbaoXR9h2gz4huSnJvkzNGHdP3PjdG/JEnq\nGNolSRqe14EzaHu/dwDPV9XL3dh9wB7gXWAnban7jVX1a+/+n4HngDeBT4BjwB3zg1X1AfBMV7Mb\nOIt2qntf9ep/7P73dtqM+Dba6e70ar4DngKeBX7o+v4z4/QvSZI6qVrq7S6SJOnf1L0r/cve6fGT\n3r+JFvJX/r2dSZKk/4Iz7ZIkSZIkDZShXZKkYXEJnCRJWuDyeEmSJEmSBsqZdkmSJEmSBsrQLkmS\nJEnSQBnaJUmSJEkaKEO7JEmSJEkDZWiXJEmSJGmgDO2SJEmSJA2UoV2SJEmSpIEytEuSJEmSNFCG\ndkmSJEmSBup3rd9ndtqzADQAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1dd54c0e080>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.linspace(data.population.min(), data.population.max(),100)\n",
    "h = theta[0,0] + (theta[0,1]*x)\n",
    "fig, ax = plt.subplots(figsize=(12,8))\n",
    "ax.plot(x, h, 'r', label='population')#直线图\n",
    "ax.scatter(data.population, data.profit, label='Training Data')#散点图\n",
    "ax.set_xlabel('population')\n",
    "ax.set_ylabel('profit')\n",
    "ax.set_title('Predicted profit vs Population size')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1dd54c25320>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(figsize=(12,8))\n",
    "ax.plot(np.arange(epoch), cost_data, 'r')\n",
    "ax.set_ylim([4.5,6.0])\n",
    "ax.set_xlabel('Iterations')\n",
    "ax.set_ylabel('Cost')\n",
    "ax.set_title('Error vs. Training Epoch')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2.3正规方程求解最小值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "var_tmp = (X.T*X)\n",
    "theta = var_tmp.I*X.T*y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "theta = theta.reshape(1,2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4.4769713759751788"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "computeCost(X, y, theta)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.多变量线性回归"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>size</th>\n",
       "      <th>bedroom</th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2104</td>\n",
       "      <td>3</td>\n",
       "      <td>399900</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1600</td>\n",
       "      <td>3</td>\n",
       "      <td>329900</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2400</td>\n",
       "      <td>3</td>\n",
       "      <td>369000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1416</td>\n",
       "      <td>2</td>\n",
       "      <td>232000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3000</td>\n",
       "      <td>4</td>\n",
       "      <td>539900</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   size  bedroom   price\n",
       "0  2104        3  399900\n",
       "1  1600        3  329900\n",
       "2  2400        3  369000\n",
       "3  1416        2  232000\n",
       "4  3000        4  539900"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data2 = pd.read_csv('ex1data2.txt', header=None, names=['size', 'bedroom', 'price'])\n",
    "data2.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 3.1 特征缩放进行数据的归一化)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>size</th>\n",
       "      <th>bedroom</th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.130010</td>\n",
       "      <td>-0.223675</td>\n",
       "      <td>0.475747</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.504190</td>\n",
       "      <td>-0.223675</td>\n",
       "      <td>-0.084074</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.502476</td>\n",
       "      <td>-0.223675</td>\n",
       "      <td>0.228626</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-0.735723</td>\n",
       "      <td>-1.537767</td>\n",
       "      <td>-0.867025</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.257476</td>\n",
       "      <td>1.090417</td>\n",
       "      <td>1.595389</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       size   bedroom     price\n",
       "0  0.130010 -0.223675  0.475747\n",
       "1 -0.504190 -0.223675 -0.084074\n",
       "2  0.502476 -0.223675  0.228626\n",
       "3 -0.735723 -1.537767 -0.867025\n",
       "4  1.257476  1.090417  1.595389"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data2 = (data2 - data2.mean()) / data2.std()\n",
    "data2.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# add ones column, and value=1\n",
    "data2.insert(0, 'ones', 1)\n",
    "\n",
    "#set X(training data) and Y (target variable)\n",
    "cols = data2.shape[1]\n",
    "X2 = data2.iloc[:, 0:cols-1]\n",
    "y2 = data2.iloc[:, cols-1:cols]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "X2 = np.matrix(X2.values)\n",
    "y2 = np.matrix(y2.values)\n",
    "theta2 = np.matrix(np.array([0,0,0]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "ename": "ValueError",
     "evalue": "Shape of passed values is (1, 3), indices imply (3, 97)",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "\u001b[0;32mD:\\software\\Anaconda3\\lib\\site-packages\\pandas\\core\\internals.py\u001b[0m in \u001b[0;36mcreate_block_manager_from_blocks\u001b[0;34m(blocks, axes)\u001b[0m\n\u001b[1;32m   3983\u001b[0m                 blocks = [make_block(values=blocks[0],\n\u001b[0;32m-> 3984\u001b[0;31m                                      placement=slice(0, len(axes[0])))]\n\u001b[0m\u001b[1;32m   3985\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[0;32mD:\\software\\Anaconda3\\lib\\site-packages\\pandas\\core\\internals.py\u001b[0m in \u001b[0;36mmake_block\u001b[0;34m(values, placement, klass, ndim, dtype, fastpath)\u001b[0m\n\u001b[1;32m   2517\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2518\u001b[0;31m     \u001b[1;32mreturn\u001b[0m \u001b[0mklass\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mvalues\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mndim\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mndim\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfastpath\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mfastpath\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mplacement\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mplacement\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   2519\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[0;32mD:\\software\\Anaconda3\\lib\\site-packages\\pandas\\core\\internals.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, values, placement, ndim, fastpath)\u001b[0m\n\u001b[1;32m     89\u001b[0m                              'implies %d' % (len(self.values),\n\u001b[0;32m---> 90\u001b[0;31m                                              len(self.mgr_locs)))\n\u001b[0m\u001b[1;32m     91\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mValueError\u001b[0m: Wrong number of items passed 1, placement implies 3",
      "\nDuring handling of the above exception, another exception occurred:\n",
      "\u001b[0;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-25-45a638f89ee8>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[1;31m# convert to matrix and initialize  theta\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mg2\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcost2\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mgradientDescent\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mX2\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my2\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtheta2\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0malpha\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mepoch\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      3\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m \u001b[1;31m# get the cost of model\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m      5\u001b[0m \u001b[0mcomputeCost\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mX2\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mg2\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-13-2befca99ea77>\u001b[0m in \u001b[0;36mgradientDescent\u001b[0;34m(X, y, theta, alpha, epoch)\u001b[0m\n\u001b[1;32m      7\u001b[0m     \u001b[1;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mepoch\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m      8\u001b[0m         \u001b[1;31m#偏导数中共同部分求和\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m----> 9\u001b[0;31m         \u001b[0minner\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mX\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0mtheta\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mT\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m-\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     10\u001b[0m         \u001b[1;32mfor\u001b[0m \u001b[0mj\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mn_theta\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m     11\u001b[0m             \u001b[1;31m#偏导数\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[0;32mD:\\software\\Anaconda3\\lib\\site-packages\\pandas\\core\\ops.py\u001b[0m in \u001b[0;36mf\u001b[0;34m(self, other, axis, level, fill_value)\u001b[0m\n\u001b[1;32m   1086\u001b[0m                 \u001b[1;31m#                            columns=self.columns)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m   1087\u001b[0m                 casted = pd.DataFrame(other, index=self.index,\n\u001b[0;32m-> 1088\u001b[0;31m                                       columns=self.columns)\n\u001b[0m\u001b[1;32m   1089\u001b[0m                 \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_combine_frame\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcasted\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mna_op\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfill_value\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlevel\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m   1090\u001b[0m             \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[0;32mD:\\software\\Anaconda3\\lib\\site-packages\\pandas\\core\\frame.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, data, index, columns, dtype, copy)\u001b[0m\n\u001b[1;32m    253\u001b[0m             \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m    254\u001b[0m                 mgr = self._init_ndarray(data, index, columns, dtype=dtype,\n\u001b[0;32m--> 255\u001b[0;31m                                          copy=copy)\n\u001b[0m\u001b[1;32m    256\u001b[0m         \u001b[1;32melif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mlist\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtypes\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mGeneratorType\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m    257\u001b[0m             \u001b[1;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtypes\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mGeneratorType\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[0;32mD:\\software\\Anaconda3\\lib\\site-packages\\pandas\\core\\frame.py\u001b[0m in \u001b[0;36m_init_ndarray\u001b[0;34m(self, values, index, columns, dtype, copy)\u001b[0m\n\u001b[1;32m    430\u001b[0m             \u001b[0mvalues\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0m_possibly_infer_to_datetimelike\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mvalues\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m    431\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m--> 432\u001b[0;31m         \u001b[1;32mreturn\u001b[0m \u001b[0mcreate_block_manager_from_blocks\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mvalues\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mindex\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    433\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m    434\u001b[0m     \u001b[1;33m@\u001b[0m\u001b[0mproperty\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[0;32mD:\\software\\Anaconda3\\lib\\site-packages\\pandas\\core\\internals.py\u001b[0m in \u001b[0;36mcreate_block_manager_from_blocks\u001b[0;34m(blocks, axes)\u001b[0m\n\u001b[1;32m   3991\u001b[0m         \u001b[0mblocks\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mgetattr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mb\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'values'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mb\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mb\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mblocks\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m   3992\u001b[0m         \u001b[0mtot_items\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msum\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mb\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mb\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mblocks\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3993\u001b[0;31m         \u001b[0mconstruction_error\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtot_items\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mblocks\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0maxes\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   3994\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m   3995\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[0;32mD:\\software\\Anaconda3\\lib\\site-packages\\pandas\\core\\internals.py\u001b[0m in \u001b[0;36mconstruction_error\u001b[0;34m(tot_items, block_shape, axes, e)\u001b[0m\n\u001b[1;32m   3968\u001b[0m         \u001b[1;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Empty data passed with indices specified.\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m   3969\u001b[0m     raise ValueError(\"Shape of passed values is {0}, indices imply {1}\".format(\n\u001b[0;32m-> 3970\u001b[0;31m         passed, implied))\n\u001b[0m\u001b[1;32m   3971\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m   3972\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mValueError\u001b[0m: Shape of passed values is (1, 3), indices imply (3, 97)"
     ]
    }
   ],
   "source": [
    "# convert to matrix and initialize  theta\n",
    "g2, cost2 = gradientDescent(X2, y2, theta2, alpha, epoch)\n",
    "\n",
    "# get the cost of model\n",
    "computeCost(X2, y, g2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 原本自己写的代码\n",
    ">参考别人代码之前,感觉自己写的还可以\n",
    ">然后看了别人的,我对我自己写的呵呵o(*￣︶￣*)o"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 3.1 特征归一化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "data2 = pd.read_csv('ex1data2.txt', names=['size','bedroom','price'])\n",
    "data2.head(),data.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "X_data2 = data2.iloc[:,:2]\n",
    "X_data2.head(),X_data2.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "range_size = X_data2['size'].max() - X_data2['size'].min()\n",
    "range_bedroom = X_data2['bedroom'].max() - X_data2['bedroom'].min()\n",
    "range_X_data2 = np.matrix(np.array([range_size, range_bedroom]))\n",
    "range_X_data2.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "cnt = np.array(data.shape)[0]\n",
    "tmp_sum = X_data2.sum()\n",
    "sum_feature = tmp_sum.reshape((1,2))\n",
    "rms = np.array(sum_feature/cnt)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "X_data2.shape, rms.shape, range_X_data2.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "_X = []\n",
    "for xi in X_data2.values:\n",
    "    t = (xi-rms) / range_X_data2\n",
    "    _X.append(t)\n",
    "_X = np.matrix(np.array(_X))\n",
    "_X.shape,type(_X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "X = pd.DataFrame(_X, columns=['size', 'bedroom'])\n",
    "X.insert(0,column='theta0', value=1)\n",
    "X = np.matrix(X)\n",
    "X.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "y = data2.iloc[:,2:3]\n",
    "y = np.matrix(y)\n",
    "y.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "tmp = X.T * X\n",
    "theta_data2 = tmp.I * X.T * y\n",
    "theta_data2.reshape((1,3))"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python [default]",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
